我有回复无效的行动。但是我需要调用它来保持当前范围在运行时保持打开状态。
public class CancellationHelper
{
CancellationTokenSource _cts;
public void Run(Action<CancellationToken> action)
{
if (_cts != null)
{
return;
}
using (_cts = new CancellationTokenSource())
{
action(_cts.Token);
}
}
}
如果操作为async
,则_cts
将在方法完成之前处理。返回类型是无效的,所以我不能等待它...我已经读过你应该避免Task.Run
并且支持async / await,但是我不知道如何使用子句来执行此操作
await Task.Run(action);
是否脏了?这是否会引发另一个“任务”或线程,以等待某个任务或线程旋转的东西?
答案 0 :(得分:3)
听起来action
是一种async void
方法
不要那样做
找不到async void
方法的时间是不可能的。
相反,您需要让方法接受Func<Task>
然后,您可以撰写await action();
。