c# - 任务是在 ContinueWith() 中快速跳过方法
问题描述
我有一个任务:
public void Main (String[] args)
{
DoMethod();
}
public void DoMethod()
{
Task<TResult> myTask = StartAsync();
myTask.ContinueWith(x =>
{
Console.WriteLine("Something");
//Do some stuff
foreach (var entry in entries)
{
MyEditor(entry);
}
//Do some stuff
});
}
public void MyEditor(string entry)
{
this.entry = entry.Remove(0, 5);
}
但是这个任务有点太快了。
MyEditor 方法只是格式化条目。
我的任务不等待MyEditor()
完成格式化。
MyEditor()
不是异步的。
我如何修改一点以等待MyEditor()
完成。
我已将代码减少到必要的最小值,以便仍然可以识别问题。我希望我成功了。
解决方案
在您的示例中,您需要等待 mytask。如果您处于异步上下文中,则可以执行以下操作:
async Task Main()
{
List<string> entries = await StartAsync();
var formattedEntries = entries.Select(e => MyEditor(e));
foreach (var entry in formattedEntries)
{
Console.WriteLine(entry);
}
}
string MyEditor(string entry)
{
return entry.ToUpper();
}
Task<List<string>> StartAsync()
{
return Task.FromResult(new List<string>{"a","b"});
}
或将代码更改为:
void Main()
{
List<string> entries = StartAsync().Result;
var formattedEntries = entries.Select(e => MyEditor(e));
foreach (var entry in formattedEntries)
{
Console.WriteLine(entry);
}
}
推荐阅读
- freemarker - 我想在 csv 的第一列中的 Free marker 模板的输出中添加一个默认文本值
- java - jOOQ DSLContext Bean 未在 Micronaut 项目中创建
- javascript - 为javascript添加/删除文本多行
- javascript - 发出 Axios GET 请求时出现无限循环 - 循环不会关闭
- spring-boot - 使用执行器初始化 SpringBoot 2.1.8.RELEASE 时出错
- powershell - 如何在Powershell中从没有标题的文本文件中选择按制表符拆分的前五列?
- c# - 将 LIST 从 c# 发送到 angular
- quire-api - 新 API - 将任务添加到板?
- swift - 为什么 becomeFirstResponder 不会在警报消息文本字段上触发软键盘
- android - 如何在 Android 10 中获取有关手机 IMEI 的信息?