我有一个异步任务,需要比主线程更长的时间。主线程在异步任务之前完成,我没有看到Async任务的结果,例如我没有看到异步任务应该插入的DB记录。
这是我的代码
Framework 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
}
答案 0 :(得分:2)
等待在方法结束时完成任务:
public void Load(int id)
{
Task asynctask1;
asynctask1 = CallWithAsync(id);
task2();
task3();
asynctask1.Wait(); // wait for async task to complete
}
如果您将await
关键字添加到async
方法本身,也可以使用Load
关键字。
答案 1 :(得分:0)
加载异步并等待通话?您可以使用异步void方法,但如果它是异步任务会更好,并且您在调用链的后面等待它。
public async void Load(int id)
{
await CallWithAsync(id); // this is async task
task2(); // main thread
task3(); // main thread
}
答案 2 :(得分:0)
在调用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;
}