gpt4 book ai didi

.net - 在 C# 中使用 Task 和 Task 有什么区别

转载 作者:行者123 更新时间:2023-12-03 12:56:09 25 4
gpt4 key购买 nike

嗨,我正在做一些实验来理解任务。这是我偶然发现的:

static void Main(string[] args)
{
Console.WriteLine(String.Format("Master in the thread {0}", Thread.CurrentThread.ManagedThreadId));

Task t1 = Task.Factory.StartNew(TaskDoNothing);
Console.WriteLine(String.Format("Result before wait"));
Task.WaitAll(t1);
Console.WriteLine(String.Format("Result after wait"));

Console.ReadLine();
}

static void TaskDoNothing()
{
Console.WriteLine(String.Format("Task in the thread {0}", Thread.CurrentThread.ManagedThreadId));
Thread.Sleep(3000);
}

这将按我的预期工作。 “等待前的结果立即显示,当任务完成时,我们看到“等待后的结果”。但是当我将其更改为使用 Task<TResult> 时,执行的优先级似乎发生了变化:
static void Main(string[] args)
{
Console.WriteLine(String.Format("Master in the thread {0}", Thread.CurrentThread.ManagedThreadId));

Task<int> t1 = Task<int>.Factory.StartNew(TaskDoNothing);
Console.WriteLine(String.Format("Result before wait: {0}", t1.Result));
Task.WaitAll(t1);
Console.WriteLine(String.Format("Result after wait: {0}", t1.Result));

Console.ReadLine();
}

static int TaskDoNothing()
{
Console.WriteLine(String.Format("3- Task in the thread {0}", Thread.CurrentThread.ManagedThreadId));
Thread.Sleep(3000);
return 3;
}

“等待前的结果仅在任务完成时与“等待后的结果”一起显示。看起来整个任务在主线程恢复之前执行,即使 ManagedThreadId 告诉它们位于单独的线程上。

有人可以帮我吗?
提前致谢!

最佳答案

Task.Result是一个阻塞操作。事实上,你在等待任务完成。如果你想要结果而不是等待,那么你可以使用 ContinueWith

关于.net - 在 C# 中使用 Task 和 Task<TResult> 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16488818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com