有效的非阻塞执行
Effective non-blocking execution
我实现了一个在云上运行的服务。我有一个方法 fastExcute()
可以非常快速地进行一些计算。
我需要在方法中添加一个调用 IndependentBackgroundMethodAsync()
到其他可以在后台执行的方法,它何时完成工作并不重要,但它应该完成!。最主要的是它最终会完成它的工作
所以我想这样做:
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
//fast code
await t; < - could cause fastExecute not to be fast
}
另一方面,将代码设为:
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
//fast code
}
不保证 IndependentBackgroundMethodAsync 最终会执行并完成其工作
做我需要做的事情的最佳做法是什么?
如果您想异步执行 IndependentBackgroundMethodAsync
并且您关心结果,我会使用 ContinueWith
(参见 MSDN continuewith)
任务完成后将执行延续任务。
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
task.ContinueWith(result => // handle result);
//fast code
}
我实现了一个在云上运行的服务。我有一个方法 fastExcute()
可以非常快速地进行一些计算。
我需要在方法中添加一个调用 IndependentBackgroundMethodAsync()
到其他可以在后台执行的方法,它何时完成工作并不重要,但它应该完成!。最主要的是它最终会完成它的工作
所以我想这样做:
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
//fast code
await t; < - could cause fastExecute not to be fast
}
另一方面,将代码设为:
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
//fast code
}
不保证 IndependentBackgroundMethodAsync 最终会执行并完成其工作
做我需要做的事情的最佳做法是什么?
如果您想异步执行 IndependentBackgroundMethodAsync
并且您关心结果,我会使用 ContinueWith
(参见 MSDN continuewith)
任务完成后将执行延续任务。
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
task.ContinueWith(result => // handle result);
//fast code
}