gpt4 book ai didi

c# - 我将如何在 C# 中访问此任务 返回值?

转载 作者:行者123 更新时间:2023-11-30 15:18:19 26 4
gpt4 key购买 nike

我正在关注@StephenHaunts 的这篇博文 https://stephenhaunts.com/2014/10/10/simple-async-await-example-for-asynchronous-programming/#comments

LongRunningOperation 中代码中last return 语句 的用途是什么。

private static async Task<string> LongRunningOperation()
{
int counter;
for (counter = 0; counter < 50000; counter++)
{
Console.WriteLine(counter);
}
return "Counter = " + counter;
}

现在我知道的是:

  1. 当我在 Task.Run 中调用此 LongrunningOperation 时,它应该返回此等待方法默认返回的任何内容。那么为什么它不这样做。

  2. 如果我使用 Task.Result 属性,那么它将同步运行并阻止调用线程,这是不推荐的。

我想问的是:

  1. 我如何在调用点打印这个返回值?

  2. 为什么@Stephen 在没有必要的时候写了那条声明?

提前致谢。

最佳答案

What is the purpose of last return statement in the code, inside LongRunningOperation.

返回字符串“Counter = 50000”并证明循环已经完成。这不是很有用,但很明显,这是一个玩具示例。您可以将您的方法声明为 static async Task而不是 static async Task<string>并且不返回值。

As I am calling this LongrunningOperation inside Task.Run, it should return whatever this awaited method is returning by default. Then Why it is not doing that.

是什么让您认为它没有这样做?以下代码段是否未返回预期结果?

string s = await Task.Run(() => LongrunningOperation());
// s should now contain "Counter = 50000".

注意:调用Task.Run没有await将返回可能未完成的任务而不是结果。

If I use Task.Result property then It'll run behave synchronously and block calling thread, which is not recommended.

没错,这就是您不应该这样做的原因。

How I'll get this returned value printed at calling spot?

通过对返回值做一些事情。通过将它分配给一个字符串(如上所示),或者直接打印它:

Console.WriteLine(await Task.Run(() => LongrunningOperation()));

And why @Stephen have written that statement when there is no need of it?

那个,你得问斯蒂芬。 :-)

关于c# - 我将如何在 C# 中访问此任务 <String> 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44129487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com