1

我正在寻找一种在 Asp.Net 中发送后台电子邮件而不必完全等待它们的方法,并遇到了“HostingEnvironment.QueueBackgroundWorkItem”方法。我注意到有两种类型的重载:QueueBackgroundWorkItem (Action) 和 QueueBackgroundWorkItem (Func <CancellationToken, Task>),但老实说我不明白其中的区别。如果有人知道的话,可以向我解释一下区别,非常感谢。

4

1 回答 1

2

根据文档Action变体:

QueueBackgroundWorkItem 接受一个任务返回回调;回调返回时,工作项将被视为已完成。

该陈述的第一部分是不正确的。但是,第二个是准确的 - 当方法返回时,它被认为是完整的。变体Func

QueueBackgroundWorkItem 接受一个任务返回回调;当返回的任务转换到终端状态时,工作项将被视为已完成。

现在这一切都是真的。您提供一个返回 a 的回调,Task系统在完成之前不会认为工作Task已完成。此变体与async Task返回方法配合得非常好,然后允许您await在方法中使用 s。

因此,如果您同步完成所有工作并且在回调返回时完成,则可以使用该Action变体。否则选择Func变体。

于 2020-11-05T11:21:03.763 回答