是没有异步返回值的方法使用Task.Run是一种不好的做法?

时间:2017-07-06 17:33:42

标签: c# asynchronous task

我没有经常看到这种模式使用,所以我想知道以下方法有什么问题吗?

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 100; i++)
        {
            Console.WriteLine(GetText());
        }
    }

    public static string GetText()
    {
        string result = "";
        Task.Run(() => result = Environment.TickCount.ToString()).Wait();
        return result;
    }
}

此外,有人可以解释为什么我得到“不是所有路径返回值”编译器错误:

    public static string GetText()
    {           
        Task.Run(() => { return Environment.TickCount.ToString();  }).Wait();            
    }

1 个答案:

答案 0 :(得分:2)

您经常看不到这种模式的原因是因为它什么都不做。您正在创建在不同线程上运行的任务,但您也会立即要求主线程等待另一个线程完成。那里没有价值。多线程的目的是让调用线程继续运行,而其他线程执行其他工作。

对于你的第二个问题:你的return语句存在于你提供的lambda中(lambda是()=&gt; {}符号)。当你调用Task.Run时,你告诉编译器&#34;开始一个新的线程,当线程准备就绪时,执行我即将给你的代码&#34;。 lambda是应该在另一个线程中执行的代码。它不会在调用Task.Run的线程中执行。就GetText()而言,您从未调用return,并且您从未返回过值。这就是编译器告诉你存在问题的原因。