Rob*_*vey 11 c# asynchronous task
换句话说,是
var task = SomeLongRunningOperationAsync();
task.Wait();
Run Code Online (Sandbox Code Playgroud)
功能相同
SomeLongRunningOperation();
Run Code Online (Sandbox Code Playgroud)
换句话说,是
var task = SomeOtherLongRunningOperationAsync();
var result = task.Result;
Run Code Online (Sandbox Code Playgroud)
功能相同
var result = SomeOtherLongRunningOperation();
Run Code Online (Sandbox Code Playgroud)
根据Task.Wait和Inlining,如果正在Wait执行的任务已经开始执行,Wait则必须阻止.但是,如果它尚未开始执行,则Wait可能能够将目标任务从其排队的调度程序中拉出,并在当前线程上内联执行.
这两个案例只是决定任务将在哪个线程上运行,如果你还在等待结果,那有关系吗?
如果在异步调用和Wait()?之间没有执行任何操作,那么在同步表单上使用异步表单有什么好处?
以下是一些差异:
AggregateException.异常堆栈将有所不同.HttpContext.Current(实际上不是线程本地但几乎是),可能是不同的.Task内存屏障可以产生同步效果.这有关系吗?通过此列表确定您自己.
这样做有好处吗?我什么都想不到.如果您的计算使用异步IO,那么等待将抵消异步IO带来的好处.一个例外是扇出IO,例如并行发出10个HTTP请求并等待它们.这样你就可以以一个线程为代价进行10次操作.
请注意,Wait并Result在所有这些方面等同.