Iqr*_*ra. 3 .net c# console multithreading async-await
我正在关注@StephenHaunts的博客文章https://stephenhaunts.com/2014/10/10/simple-async-await-example-for-asynchronous-programming/#comments
在LongRunningOperation中的代码中最后一个return语句的目的是什么.
private static async Task<string> LongRunningOperation()
{
int counter;
for (counter = 0; counter < 50000; counter++)
{
Console.WriteLine(counter);
}
return "Counter = " + counter;
}
Run Code Online (Sandbox Code Playgroud)
现在我所知道的是:
当我在LongrunningOperation里面调用Task.Run它时,它应该返回默认返回的等待方法.然后为什么不这样做.
如果我使用Task.Result属性,那么它将同步运行并阻止调用线程,这是不推荐的.
我想问的是:
我如何在呼叫点打印这个返回值?
为什么@Stephen在没有需要的时候写了这个陈述?
提前致谢.
return内部代码中最后一个语句的目的是什么LongRunningOperation.
返回字符串"Counter = 50000"并演示循环已完成.这不是很有用,但显然,这是一个玩具的例子.您可以将方法声明为static async Task而static async Task<string>不是返回值.
当我在
LongrunningOperation里面调用Task.Run它时,它应该返回默认返回的等待方法.然后为什么不这样做.
是什么让你认为它不是那样做的?以下代码段是否未返回预期结果?
string s = await Task.Run(() => LongrunningOperation());
// s should now contain "Counter = 50000".
Run Code Online (Sandbox Code Playgroud)
注意:Task.Run不带调用await将返回可能未完成的任务而不是结果.
如果我使用
Task.Result属性,那么它将同步运行并阻止调用线程,这是不推荐的.
确切地说,这就是你不应该这样做的原因.
我如何在呼叫点打印这个返回值?
通过返回值做一些事情.通过将其分配给字符串(如上所示),或直接打印它:
Console.WriteLine(await Task.Run(() => LongrunningOperation()));
Run Code Online (Sandbox Code Playgroud)
为什么@Stephen在没有需要的时候写了这个陈述?
那,你要问斯蒂芬.:-)
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |