c# - 如何更好地在 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;
}
}
我需要更换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
。如何最好地替换此代码?
解决方案
当您在 a 上使用await
运算符Task
时,您获得的值是Task
.
因此,就您而言,taskDisposeTokenUnreg
这已经是UserActionResult
您正在寻找的价值。你可以return taskDisposeTokenUnreg
。
推荐阅读
- python - 带有 2D numpy 数组输入的 Tensorflow Keras Conv2D 错误
- ios - 用于更改标签文本的 Swift 按钮操作不起作用
- php - User.php boot() 方法在用户注册时被多次调用
- mysql - 如果所选日期没有可用数据,则查询打印 null
- java - 如何从另一个活动访问抽屉
- javascript - 通过查询或从 Vue 中的存储发送数据
- r - 使用 R 选择具有最高值的列
- javascript - Chrome 扩展程序如何“侦听”主机页面上的所有 iFrame 以完成加载?
- mongodb - MongoDB 喜欢(upvote)和不喜欢(downvote)模式设计
- javascript - 带有渐变的 SVG 圆形颜色