【发布时间】:2014-05-05 02:57:01
【问题描述】:
我有一个异步方法:
public async Task DoSomethingAsync(){
...
await ...
await ...
....
return await SaveAsync();
}
在大多数情况下,我通过以下方式调用此方法:
await DoSomethingAsync()
此调用按预期工作。但是在某个地方,我需要将此方法称为火而忘记:
public void OtherMethod()
{
...
DoSomethingAsync(); //fire and forget here
}
在这种情况下,有时任务DoSomethingAsync() 运行并完成,但有时任务从未被调用(或在DoSomethingAsync() 中调用一些awaits 但从未完成最后一个await SaveAsync();)。
我正在尝试确保任务将通过这些代码以火和忘记的方式调用:
public void OtherMethod()
{
...
Task.Factory.StartNew(() =>
{
await DoSomethingAsync();
}); //fire and forget again here
}
但是,这并不像预期的那样工作。所以我的问题是:
如何在没有
await的情况下调用DoSomethingAsync()将始终运行并完成? (我不关心 AppDomain 重启/崩溃的情况)
1234563完成(忽略 AppDomain 重启/崩溃的情况),如果是,距离调用多长时间(如果任务将在 10 分钟后被调用,我认为我不会高兴)?
【问题讨论】:
标签: c# .net asp.net-mvc async-await fire-and-forget