Возможно, я не выполнил правильный поиск здесь на форуме, потому что не нашел подобной проблемыЧто ж, моя проблема в том, что когда я пытаюсь выполнить метод async
внутри thread
.
Когда я запускаю метод (Register)
без thread
, он работает отлично!Ниже приведен пример сценария.
private SyncProcess _sync = new SyncProcess();
private static HttpClient _httpClient = new HttpClient();
private Thread _thread;
public class SyncProcess : ISyncProcess
{
public event CompleteHandler OnComplete = delegate { };
// another properties ...
public void Run()
{
// import rules
// ...
OnComplete();
}
}
public void TestImport()
{
Register(idsync, "start"); // here register works fine
_sync.OnComplete += ImportComplete;
_thread = new Thread(() =>
{
try
{
_sync.Run();
}
catch (Exception ex)
{
// not fall here
}
});
//
_thread.Start();
}
private void ImportComplete()
{
// other end-of-import rules
// ...
Register(idsync, "complete"); // here register not works
}
public async Task<string> Register(int idsync, string type)
{
string url = "myurl";
var stringContent = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("json", "myjson") });
var response = await _httpClient.PostAsync(url + type, stringContent);
if (response.IsSuccessStatusCode)
{
// do something
}
return "";
}
Проблема возникает, когда я вызываю метод (Register)
внутри потока, другая вещь заключается в том, что он не генерирует ошибку,не попадая в try
, отладка просто прекращается.Я пытался добавить код try
везде, но никогда не вылетал в catch
.Отладка всегда прерывается в следующей строке:
var response = await _httpClient.PostAsync(url + type, stringContent);
Что мне делать в этом случае?
Обновлен код, возвращающий строку в методе Register
, но остается та же ошибка.Спасибо за любые предложения!