【发布时间】:2019-12-25 18:23:15
【问题描述】:
我有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;
}
}
我需要将 continueWith 替换为 await。我在这个例子中尝试:
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。
如何最好地替换此代码?
【问题讨论】:
-
var taskDisposeTokenUnreg应该已经是Result- 你检查过它的类型吗?
标签: c# async-await task token continuewith