如何使用await来保存using子句的范围?

时间:2012-11-21 19:11:45

标签: c# async-await

我有回复无效的行动。但是我需要调用它来保持当前范围在运行时保持打开状态。

    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);是否脏了?这是否会引发另一个“任务”或线程,以等待某个任务或线程旋转的东西?

1 个答案:

答案 0 :(得分:3)

听起来action是一种async void方法 不要那样做 找不到async void方法的时间是不可能的。

相反,您需要让方法接受Func<Task> 然后,您可以撰写await action();