为什么B运行同步? Vs说。“因为没有等待这个调用,所以当前方法的执行在呼叫完成之前继续。” ;
A) Task.Factory.StartNew(() => Funcation(1, 1)); //Runs Async
B) Funcation(1, 1); // Says it runs async in vs, but really runs sync.
C) var handleOne = Task.Run(() =>
{
Funcation(1, 1);
}); // Runs Async
D) await Task.Factory.StartNew(() => Funcation(1, 1)); //awaits correctly
E) await Funcation(1, 1); //awaits correctly
static private async Task<int> Funcation(int x, int y)
{
Task.Delay(1000).Wait();
}
答案 0 :(得分:1)
Funcation
正在使用async
关键字,但await
没有Function
用于其中的任何内容,因此它始终会同步运行。 Task.Factory.StartNew(() => Funcation(1, 1)); //Runs Async
甚至都没有编译。
<强> A)强>
Function
在这里你创建一个线程,在那个线程上你调用Funcation(1, 1);
所以它是asynchrounsly因为它在另一个线程上运行。
<强> B)强>
Function
async
被标记为await
,但未被Function
标记为调用它。在这种情况下,编译器不会检查await
是否在其身体中使用var handleOne = Task.Run(() => { Funcation(1, 1); }); // Runs Async
(它已在您的函数声明中告诉您)。它只是检查你是否在不等待它的情况下调用异步方法。
<强> C)强>
await Task.Factory.StartNew(() => Funcation(1, 1)); //awaits correctly
我不确定这个,如果有人知道这里发生了什么,请帮助。
<强> d)强>
await Funcation(1, 1); //awaits correctly
与 A 相同,但等待创建的任务,一切正常。创建一个运行异步操作的任务也是一个非常糟糕的主意。
<强> E)强>
async
我们真的除了别的事情发生了吗?这是您应该使用await
和{{1}}的方式。
答案 1 :(得分:0)
您的功能正在使用Wait
,即阻止。请改用await
。此外,您将任务定义为Task<int>
,但没有返回任何结果 - 这不会编译。它应该是这样的:
static private async Task<int> Funcation(int x, int y)
{
await Task.Delay(1000);
return x + y; // some int result
}
使用您的代码&#34; E&#34;调用。其他调用都是不正确的。
此外,如果您的代码确实不需要延迟,那么这对于异步来说不是一个好的用例。异步操作应该是长时间运行或IO绑定的事情。如果您的代码只是执行简单的算术,那么只需将它作为传统的同步方法。