我需要运行一些异步任务,这导致我永远不会在任何地方使用它,而且我不在乎它何时完成。
例如,我可能需要我的 Discord 客户端响应如下命令:
// .command
await StartLongAsyncTaskThatMayTakeForeverToCompleteAndSay("I'm late");
await Context.Message.ReplyAsync("Immediately say hi"));
// => "Immediately say hi"
// *few seconds later*
// => "I'm late"
我应该这样做:await StartLongAsyncTask().ConfigureAwait(false);
或 _ = StartLongAsyncTask();
或者我应该使用 Task.Run (() => {} );
,有什么区别?
最佳答案
这在很大程度上取决于 StartLongAsyncTaskThatMayTakeForeverToCompleteAndSay
是什么以及上下文,例如在某些情况下将调用结果分配给任务变量并在第二次调用后等待它是可以的:
var task = StartLongAsyncTaskThatMayTakeForeverToCompleteAndSay("I'm late");
await Context.Message.ReplyAsync("Immediately say hi"));
await task;
或者只是:
await Task.WhenAll(StartLongAsyncTaskThatMayTakeForeverToCompleteAndSay("I'm late"),
Context.Message.ReplyAsync("Immediately say hi")));
有关两者之间的差异 - 请参阅 Why should I prefer single 'await Task.WhenAll' over multiple awaits? .
关于c# - "fire and forget"异步任务或在后台运行它的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75112294/