我只是想知道dot.net 4中的新Task类是创建后台线程还是前台线程?
通常我会在线程上设置“ IsBackground”,但是在Task上没有这样的属性。
我无法在MSDN上找到有关此文件的任何文档:-(
Answers:
验证并不难:
class Program
{
static void Main()
{
Task
.Factory
.StartNew(() => Console.WriteLine(Thread.CurrentThread.IsBackground))
.Wait();
}
}
答案是...
ǝnɹʇ
如果您还不相信后台任务,只需尝试从Task内访问GUI元素,例如:
public async Task<int> ProcessStuff_Async()
{
while(true)
{
label1.Text = "processing next item";
获取运行时异常:
跨线程操作无效:从创建该线程的线程以外的线程访问控件“ label1”。
就像使用良好的旧常规背景线程一样。
MSDN文档中有信息(截至2017年:-),例如:
处理此问题的最佳方法是启动一个后台线程 ,该线程使用Task.Run进行工作,并等待其结果。这将使UI在完成工作时感觉流畅。
这个文档甚至有一节What happens under the covers
。