У меня есть асинхронная задача, которая займет больше времени, чем основной поток. Основной поток завершается перед задачей async, и я не вижу результатов задачи Async, например, я не вижу записи БД, которую должна вставить задача async.
Вот мой код
Фреймворк 4.5
public void Load(int id)
{
Task asynctask1;
asynctask1 = CallWithAsync(id); // this is async task
task2(); // main thread
task3(); // main thread
}
private async static Task CallWithAsync(int id)
{
string result = "";
try
{
result = await InsertDataAsync(id);
}
catch (Exception ex)
{
//do some error logging
}
//return result;
}
static Task<string> InsertDataAsync(int id)
{
return Task.Run<string>(() =>
{
return InsertData(id);
});
}
static string InsertData(int id)
{
try
{
System.Threading.Thread.Sleep(5000);//we have some code here which takes longer
//code to insert DB record
}
catch (Exception ex)
{
//do some error logging
}
return "success";
}
public void task2()
{
//some thing
}
public void task3()
{
//some thing
}
3 ответа
Дождитесь завершения задачи в конце метода:
public void Load(int id)
{
Task asynctask1;
asynctask1 = CallWithAsync(id);
task2();
task3();
asynctask1.Wait(); // wait for async task to complete
}
Вы также можете использовать ключевое слово await
, если добавите ключевое слово async
в сам метод Load
.
Сделать Load async и дождаться звонка? У вас может быть метод async void, хотя было бы лучше, если бы это была асинхронная задача, и вы ждали ее дальше по цепочке вызовов.
public async void Load(int id)
{
await CallWithAsync(id); // this is async task
task2(); // main thread
task3(); // main thread
}
Создайте Load
метод async
, ожидая asynctask1
после вызовов task2()
и task3()
. Обратите внимание: метод Load
теперь возвращает Task
вместо void
public async Task Load(int id)
{
Task asynctask1;
asynctask1 = CallWithAsync(id); // this is async task
task2(); // main thread
task3(); // main thread
var result = await asynctask1;
Console.Writeline(result); //verify returned value of asynctask1 task
}
private async static Task<string> CallWithAsync(int id)
{
string result = "";
try
{
result = await InsertDataAsync(id);
}
catch (Exception ex)
{
//do some error logging
}
return result;
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.