假设我有以下异步方法需要相当长的时间才能完成其工作:
void async Task LongWork()
{
await LONGWORK() // ... long work
}
现在,在一个 web api 中,我想在后台运行该工作(即,我想在启动 LongWork() 之后但在其完成之前返回 Http 请求:
我可以想到三种方法来实现这一点:
1) public async Task<string> WebApi()
{
... // do another work
await Task.Factory.StartNew(() => LongWork());
return "ok";
}
2) public async Task<string> WebApi()
{
... // do another work
await Task.Factory.StartNew(async () => await LongWork());
return "ok";
}
3) public async Task<string> WebApi()
{
... // do another work
Task.Factory.StartNew(async () => await LongWork());
return "ok";
}
Q1:方法#1 和#2 有什么区别?
Q2:在 ASP.NET 世界中,运行方法的正确方法是什么(在本例中,LongWork() 在后台线程中包含一些异步/等待对?特别是在#3 中,没有“等待”在 Task.Factory.StartNew(async () => await LongWork()) 之前。可以吗?
谢谢!