C# 检查Task.Factory.StartNew何时完成?
因此,我目前正在使用C# 检查Task.Factory.StartNew何时完成?,c#,.net,C#,.net,因此,我目前正在使用Task.Factory.StartNew执行多线程。我试图做的是从API站点异步加载数据,然后立即使用数据 我试着做: var task = Task.Factory.StartNew(loadSummoner).ContinueWith(init); private async void loadSummoner() { summoner = await riotApi.GetSummonerAsync(region, summonerName); le
Task.Factory.StartNew
执行多线程。我试图做的是从API站点异步加载数据,然后立即使用数据
我试着做:
var task = Task.Factory.StartNew(loadSummoner).ContinueWith(init);
private async void loadSummoner() {
summoner = await riotApi.GetSummonerAsync(region, summonerName);
leagues = await summoner.GetLeaguesAsync();
}
private void init(Task task) {
lblSummonerName.Content = summoner.Name;
}
但这是行不通的,因为这只是一个呼叫列车,而不是从第一个呼叫完成时开始的继续。最好的方法是什么
提前谢谢 你的
装载召唤器
方法应该返回任务
:
private async Task LoadSummonerAndLeaguesAsync() {
summoner = await riotApi.GetSummonerAsync(region, summonerName);
leagues = await summoner.GetLeaguesAsync();
}
那么你就这样称呼它:
LoadSummonerAndLeaguesAsync().ContinueWith(init);
你不需要
任务。运行你的代码。哎呀,我是说Task.Factory.start如果你在等待任务完成,你应该问问自己,线程化有什么意义?啊,我明白了!现在开始工作了!另外,跨线程更改表单控件的最佳方法是什么?到目前为止,我已经使用ObjectDelegate完成了这项工作,但我想知道是否有更好的方法..应该使用await
调用它,而不是ContinueWith
@TimondeGroot:在这种情况下不涉及线程。默认情况下,Continuations(无论是通过wait
创建的,还是通过continuateWith
创建的)应在相同的上下文中执行,即应用程序的消息循环。您可以通过在init
方法中设置断点并检查堆栈跟踪来验证这一点,它应该显示您在主线程上。