首页 > 解决方案 > 如何更好地在 C# 中将 continueWith 替换为 async/await

问题描述

我有C#代码:

public class SimpleClass{

    public Task<TestClass> WaitForUserInput(IResource resource, CancellationToken token)
    {
        var button = resource.GetResource();

        var taskCompletionSource = new TaskCompletionSource<UserActionResult>();
        IDisposable cancellationTokenReg = token.Register(
                                      () => taskCompletionSource.SetResult(new TestClass()));

        var taskDisposeTokenUnreg = taskCompletionSource.Task.ContinueWith(
            task =>
                {
                    cancellationTokenReg.Dispose();
                     return task.Result;
                 });

        button.TouchEvent += Subscribe;
        button.Disabled = true;

        return taskDisposeTokenUnreg;
    }
}       

我需要更换continueWithawait. 我在这个例子中尝试:

public class SimpleClass{

    public async Task<TestClass> WaitForUserInput(IResource resource, CancellationToken token)
    {
        var button = resource.GetResource();

        var taskCompletionSource = new TaskCompletionSource<UserActionResult>();
        IDisposable cancellationTokenReg = token.Register(
                                      () => taskCompletionSource.SetResult(new TestClass()));

        var taskDisposeTokenUnreg = await taskCompletionSource.Task
        cancellationTokenReg.Dispose();
        return taskDisposeTokenUnreg.Result;

        button.TouchEvent += Subscribe;
        button.Disabled = true;

        return taskDisposeTokenUnreg;
    }
}     

但是taskDisposeTokenUnreg没有领域Result,你不能那样写await taskCompletionSource.Task.Result。如何最好地替换此代码?

标签: c#async-awaittasktokencontinuewith

解决方案


当您在 a 上使用await运算符Task时,您获得的值是Task.

因此,就您而言,taskDisposeTokenUnreg这已经是UserActionResult您正在寻找的价值。你可以return taskDisposeTokenUnreg


推荐阅读