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.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.Run
,FooTask
将在当前线程上 运行,直到安排了延续,并且继续恢复的线程由同步上下文确定。