저는 잠시 동안 내 머리를 긁어 왔습니다. 나는이 예외가 던져지고있는 어떤 단서도 가지고 있지 않다. 도대체 나는이 예외를 잡기로되어 있나? System.Net.WebException
입니다. 나는 단지 Task와 Async/Await을 얻지 못하고있는 것 같다. 다른 스레드를 만드는 중이라는 것을 이해합니다.이 스레드는 모두 훌륭하지만 모든 예외를 처리 할 수 있습니까?작업에서 던져진 예외를 캐치 할 수 없습니다.
public async void sendRequest(string database, string table, string where, bool isPost, int deviceType)
{
string urlQuery = Constants.URL_QUERY + database + "/" + table + "?" + where;
Debug.WriteLine("URL Query: " + urlQuery);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlQuery);
request.Method = isPost ? "POST" : "GET";
request.ContentType = "application/json";
try
{
Debug.WriteLine("getting response");
WebResponse response = await makeAsyncRequest(request);
Debug.WriteLine("response obtained");
finishRequest(response);
}
catch (WebException e)
{
Debug.WriteLine("WebException caught");
}
}
private async static Task<WebResponse> makeAsyncRequest(HttpWebRequest req)
{
Task<WebResponse> task = Task.Factory.FromAsync<WebResponse>(req.BeginGetResponse, req.EndGetResponse, null);
await task.ContinueWith(t =>
{
if (t.IsFaulted)
{
Debug.WriteLine("It's faulted.");
t.Exception.Handle((x) =>
{
if (x is WebException)
{
Debug.WriteLine("It's a web exception");
return true;
}
Debug.WriteLine("Exception?: " + x);
return false;
});
}
});
Debug.WriteLine("returning task");
return task.Result;
}
private static void finishRequest(WebResponse response)
{
Debug.WriteLine("finishRequest called");
}
내가 내 출력 창에 표시되는 내용입니다 : 여기
The remote server returned an error: (403) Forbidden.
2014-10-07 14:05:05.104 FormsTemplateiOS[1568:53280] getting response
[0:] getting response
Thread started: #3
Thread started: <Thread Pool> #4
Thread started: <Thread Pool> #5
Thread started: <Thread Pool> #6
Thread started: <Thread Pool> #7
Thread started: #8
[0:]
2014-10-07 14:05:05.681 FormsTemplateiOS[1568:53326] It's faulted.
[0:] It's faulted.
[0:]
2014-10-07 14:05:05.804 FormsTemplateiOS[1568:53326] It's a web exception
[0:] It's a web exception
Unhandled Exception:
System.Net.WebException: The remote server returned an error: (403) Forbidden.
Unhandled Exception:
System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x0033b] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.0.0.63/src/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1718
at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00165] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.0.0.63/src/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1485
The program 'Mono' has exited with code 0 (0x0).
Debugging session ended.
편집 : 스티븐 클리어 리 당 makeAsyncRequest(HttpWebRequest)
업데이트
암시. 나는 여전히 같은 문제를 겪고있다.
private async static Task<WebResponse> makeAsyncRequest(HttpWebRequest req)
{
Task<WebResponse> task = Task.Factory.FromAsync<WebResponse>(req.BeginGetResponse, req.EndGetResponse, null);
try
{
return await task;
}
catch (WebException e)
{
Debug.WriteLine("It's a WebException");
}
catch (Exception e)
{
Debug.WriteLine("Other Exception");
}
return null;
}
출력 창 :
2014-10-07 14:32:08.385 FormsTemplateiOS[1588:57008] getting response
[0:] getting response
Thread started: #3
Thread started: <Thread Pool> #4
Thread started: <Thread Pool> #5
Thread started: <Thread Pool> #6
Thread started: <Thread Pool> #7
Thread started: #8
Unhandled Exception:
System.Net.WebException: The remote server returned an error: (403) Forbidden.
Unhandled Exception:
System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x0033b] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.0.0.63/src/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1718
at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00165] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.0.0.63/src/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1485
The program 'Mono' has exited with code 0 (0x0).
Debugging session ended.
_. 나는이 예외가 던져지고 있다는 것을 알지 못한다. StackTrace를 보려고 했는가? –
질문에 출력 추가. –
[예외가 발생하면 중단] (http://msdn.microsoft.com/en-us/library/d14azbfh.aspx)를 사용하십시오. 디버거가 예외가 발생하는 곳에서 바로 멈 춥니 다. 다른 옵션은 StackTrace를 검사합니다. –