我没有经常看到这种模式使用,所以我想知道以下方法有什么问题吗?
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();
}
答案 0 :(得分:2)
您经常看不到这种模式的原因是因为它什么都不做。您正在创建在不同线程上运行的任务,但您也会立即要求主线程等待另一个线程完成。那里没有价值。多线程的目的是让调用线程继续运行,而其他线程执行其他工作。
对于你的第二个问题:你的return语句存在于你提供的lambda中(lambda是()=&gt; {}符号)。当你调用Task.Run时,你告诉编译器&#34;开始一个新的线程,当线程准备就绪时,执行我即将给你的代码&#34;。 lambda是应该在另一个线程中执行的代码。它不会在调用Task.Run的线程中执行。就GetText()而言,您从未调用return,并且您从未返回过值。这就是编译器告诉你存在问题的原因。