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
方法中设置断点并检查堆栈跟踪来验证这一点,它应该显示您在主线程上。