1

我有返回无效的操作。但我需要调用以在当前范围运行时保持打开状态。

    public class CancellationHelper
{
    CancellationTokenSource _cts;

    public void Run(Action<CancellationToken> action)
    {
        if (_cts != null)
        {
            return;
        }
        using (_cts = new CancellationTokenSource())
        {
            action(_cts.Token);
        }
    }
}

如果 action 是async_cts将在方法完成之前被释放。返回类型是无效的,所以我不能只是等待它......我已经读过你应该避免Task.Run和支持 async/await,但我不知道如何为 using 子句执行此操作。

await Task.Run(action);脏吗?这是在启动另一个“任务”或线程以等待启动任务或线程的东西吗?

4

1 回答 1

3

听起来像是action一种async void方法。
不要那样做
不可能找出async void方法何时结束。

相反,您需要让您的方法接受一个Func<Task>.
然后你就可以写了await action();

于 2012-11-21T19:14:32.937 回答