【发布时间】:2017-12-10 20:29:29
【问题描述】:
我不经常看到这种模式,所以我想知道下面的方法有什么问题吗?
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();
}
【问题讨论】:
-
在开始使用多线程之前,您需要阅读一些基础知识。这不太对。 (我假设您是初学者,否则您不会问第二个问题。)
-
返回需要在Wait()之后。所以 return Task.Run(() => { yield Environment.TickCount.ToString(); }).Wait();
-
Task.Run(...).Wait();只是意味着你想阻止 2 个线程而不是 1 个。 -
任务不一定使用第二个线程。它可能只会在主线程上运行
-
@JoePhillips
Task.Run始终使用线程池任务调度程序,因此它将始终在第二个线程上运行。Task.Factory.StartNewdepending on the situation 最终可能会在 UI 线程上执行任务。
标签: c# asynchronous task