我正在寻找一种在 Asp.Net 中发送后台电子邮件而不必完全等待它们的方法,并遇到了“HostingEnvironment.QueueBackgroundWorkItem”方法。我注意到有两种类型的重载:QueueBackgroundWorkItem (Action) 和 QueueBackgroundWorkItem (Func <CancellationToken, Task>),但老实说我不明白其中的区别。如果有人知道的话,可以向我解释一下区别,非常感谢。
问问题
84 次
1 回答
2
根据文档,Action
变体:
QueueBackgroundWorkItem 接受一个任务返回回调;回调返回时,工作项将被视为已完成。
该陈述的第一部分是不正确的。但是,第二个是准确的 - 当方法返回时,它被认为是完整的。变体Func
:
QueueBackgroundWorkItem 接受一个任务返回回调;当返回的任务转换到终端状态时,工作项将被视为已完成。
现在这一切都是真的。您提供一个返回 a 的回调,Task
系统在完成之前不会认为工作Task
已完成。此变体与async
Task
返回方法配合得非常好,然后允许您await
在方法中使用 s。
因此,如果您同步完成所有工作并且在回调返回时完成,则可以使用该Action
变体。否则选择Func
变体。
于 2020-11-05T11:21:03.763 回答