【发布时间】:2019-08-05 15:41:18
【问题描述】:
我在 C# 中有一个异步函数如下:
private static async Task AddEmoji(string emoji)
{
...
}
我有一种情况,我想调用它,但我不想等待它的结果,我不在乎它是否有效。解决这个问题的正确方法是什么?我以为我可以在不添加异步参数的情况下调用它:
AddEmoji("????");
... 可行,但 VS 给了我一个 CS4014 编译警告,所以我想这是不对的。然后我尝试为它创建一个任务:
Task.Run(() => await AddEmoji("????"));
但这给了我一个实际的编译错误:
错误 CS4034 'await' 运算符只能在异步中使用 拉姆达表达式。考虑用 'async' 修饰符。
解决这个问题的正确方法是什么?
【问题讨论】:
-
你试过不等待就调用它吗:Task.Run(() => AddEmoji("????"));
-
是第二次尝试 - 你可能需要
Task.Run(async () => await AddEmoji("????"));- 但是,你可能只是可以将任务放在地板上......GC.KeepAlive(somethingYouDoNotCareAbout)在大多数情况下效果很好(调用 @ 987654326@ 实际上只是一个不透明的方法,什么都不做)或者只是抑制警告! -
如果您不在乎它是否有效,为什么还要首先调用它?
-
大家好 - 如果我调用 @NikolaBabic 或 Marc 的建议,我会收到 CS4014(考虑应用“等待”运算符)警告。并不是说我完全不在乎它是否有效——我只是不想等待它返回或知道它是否有效,因为如果它失败了,我不会特别做不同的事情。跨度>
-
请注意,在 .NET 4.5 之前将任务放在地板上是一个非常糟糕的主意。如果任务包含异常,任务的终结器将重新抛出它。这在 4.5 中已更改。
标签: c# .net async-await