Я создаю небольшой личный проект с помощью форм Xamarin. В течение некоторого времени я случайно (вероятность 80%) получаю следующее исключение, и я не знаю почему: «Неожиданный конец потока».
Часть трассировки стека:
--- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess
(Задача System.Threading.Tasks.Task) [0x0003e] в
<43dbbdc147f2482093d8409abb04c233>: 0 в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification
(Задача System.Threading.Tasks.Task) [0x00028] в
<43dbbdc147f2482093d8409abb04c233>: 0 в
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd
(Задача System.Threading.Tasks.Task) [0x00008] в
<43dbbdc147f2482093d8409abb04c233>: 0 в
System.Runtime.CompilerServices.TaskAwaiter 1[TResult].GetResult ()
[0x00000] in <43dbbdc147f2482093d8409abb04c233>:0 at
System.IO.Stream.EndRead (System.IAsyncResult asyncResult) [0x0006a]
in <43dbbdc147f2482093d8409abb04c233>:0 at
System.IO.Stream+<>c.<BeginEndReadAsync>b__43_1 (System.IO.Stream
stream, System.IAsyncResult asyncResult) [0x00000] in
<43dbbdc147f2482093d8409abb04c233>:0 at
System.Threading.Tasks.TaskFactory
1 + FromAsyncTrimPromise 1[TResult,TInstance].Complete
(TInstance thisRef, System.Func
3 [T1, T2, TResult] endMethod,
System.IAsyncResult asyncResult, System.Boolean
требуется синхронизация) [0x00000] в
<43dbbdc147f2482093d8409abb04c233>: 0
Это мне мало что говорит.
Это код, из которого выдается исключение:
public async Task<string> PostDataToService(string sendURI, string json)
{
HttpClient client = Client;
string strresult = "";
try
{
Debug.WriteLine("### DataService#PostDataToService Posting: " + sendURI);
Debug.WriteLine("### JSON: " + json);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
_httpResponse = await client.PostAsync(sendURI, content);
if (_httpResponse.IsSuccessStatusCode)
{
strresult = await _httpResponse.Content.ReadAsStringAsync();
}
}
catch (Exception ex) when (ex is TaskCanceledException || ex is OperationCanceledException)
{
Debug.WriteLine("### DataService#PostDataToService Timeout!");
MessagingCenter.Send<App>((App)Application.Current, Settings.MESSAGING_COMMUNICATIONTIMEOUT);
}
catch (System.Exception ex)
{
Debug.WriteLine("### DataService#PostDataToService Exception@" + DateTime.Now);
Debug.WriteLine("### DataService#PostDataToService Error: " + ex.Message);
Debug.WriteLine(ex.StackTrace);
MessagingCenter.Send<App>((App)Application.Current, Settings.MESSAGING_COMMUNICATIONERROR);
}
Debug.WriteLine("### DataService#PostDataToService Returning for URI " + sendURI);
Debug.WriteLine("### DataService#PostDataToService Returning: " + strresult);
return strresult;
}
Фактическое исключение выдается в методе PostAsync.
Любая помощь очень ценится, поскольку в настоящее время я потрачу на это несколько часов в течение нескольких дней.
Редактировать: одна дополнительная информация: сообщение выполняется в той части, где сервер уже ответил и вернул результат.