C# 7.0 独立丢弃混淆 | _ = FooTask() 和 _ = Task.Run(FooTask) 之间的区别

C# 7.0 standalone discard confusion | difference between _ = FooTask() and _ = Task.Run(FooTask)

我有一个 Task FooTask 应该在后台调用。 C# 7.0 中的一项新功能是 discard 函数。正如已经问过的那样 (C# 7.0 standalone discard confusion) 可以通过两种方式调用 Task。但是,我还没有能够确切地找出这两个调用有何不同以及它们是否有所不同。

_ = Task.Run(FooTask);
_ = FooTask();

丢弃在这里没有任何区别;您的代码与:

Task.Run(FooTask);
FooTask();

甚至生成的 IL 也是相同的。

丢弃只是明确表明返回的 Task 不需要任何进一步的处理。

However, I have not yet been able to find out exactly how these two calls differ and whether they make a difference at all

不同之处在于 Task.Run 的使用,它在 ThreadPool 线程上强制 FooTask 到 运行。

如果没有 Task.RunFooTask 将在当前线程上 运行,直到安排了延续,并且继续恢复的线程由同步上下文确定。