如何从异步Task <string> function()返回值;在C#中

时间:2017-05-23 06:02:37

标签: c# .net multithreading asynchronous

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

以下是代码

 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

4 个答案:

答案 0 :(得分:3)

您需要using System; using System.Diagnostics; using System.ComponentModel; namespace MyProcessSample { class MyProcess { public static void Main() { Process myProcess = new Process(); try { myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.FileName = @"yourpath\youtube-dl.exe"; myProcess.StartInfo.CreateNoWindow = false; myProcess.StartInfo.Arguments = "https://www.youtube.com/watch?v=KFqrp4KSxio"; myProcess.Start(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } 部分吗?您可以Task.Run使用异步方法:

await

您也可以调用结果:

var result = await pizza();

Console.WriteLine(result);

答案 1 :(得分:2)

你可以

var pizza = await pizza();

或者

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

答案 2 :(得分:-1)

您可以使用:

import math;
binary=0b11111111110110001111111111100001
decimal=int(binary)
print(decimal)
print("{0:#b}".format(decimal))

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

您无需使用Task.Run等待。您只需要等待异步方法。然后,您可以在任何地方使用returnValue。

答案 3 :(得分:-4)

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

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

在这里,我们与所谓的专家程序员一起投票匆忙。

尝试删除等待,放入.Result,你会得到这个:

“这个异步方法缺少'await'运算符并将同步运行。考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'来执行CPU绑定工作在背景线程上。“