如何在 C# 中获取从异步任务<string>函数(); 返回的值



我有一个异步方法,我想在完成后从同一方法获取消息。

下面是代码

 static async Task<string> pizza()
        {
            await Task.Delay(10);
            for (int i = 0; i < 100; i++)
            {
                //Console.WriteLine("Processing pizza...");
            }
            return "Pizza is ready";
        } 

我想在呼叫点收到此消息

....... code 
Task t=null;
            switch (option)
            {
                case 1:
                    {
                        await Task.Run(() =>
                        {
                         t=pizza();// asynchronous method  
                        });
                        Console.WriteLine(t.ToString());
                    }
                    break;
 .... other code

你需要Task.Run部分吗?您可以await在异步方法中:

var result = await pizza();
Console.WriteLine(result);

您也可以调用结果:

var result = pizza().Result;

你可以

var pizza = await pizza();

var pizza = pizza().GetAwaiter().GetResult();

您可以使用:

var returnValue = string.Empty;
    {
        returnValue = await Pizza();
    }
    Console.WriteLine(returnValue);

它仍将异步运行。遇到 await 语句时,控制将返回到主线程,并且不会暂停执行。一段时间后,当 Pizza 方法返回执行时,状态机将自动执行 returnValue 输出

您不需要使用 Task.Run 只是为了等待。您只需要等待异步方法。然后稍后你可以在任何你想要的地方使用 returnValue。

如果您等待它,它将异步执行。如果你这样做 t.result,它将同步执行。

这实际上取决于您执行同步或异步的需求。

在这里,我们和所谓的专家程序员一起投反对票。

尝试删除等待,放置 .结果,你会得到这个:

"这种异步方法缺少'await'运算符,并且将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await Task.Run(...('在后台线程上执行CPU密集型工作。

最新更新