我想执行一系列任务,并在其中任何一个完成时执行同步操作,但我需要知道是哪个任务完成了。
请查看我的示例,并注意代码中的注释,在我不知道如何实现的几行之前。
请查看我的示例,并注意代码中的注释,在我不知道如何实现的几行之前。
public async Task<bool> GreetAsync(string name)
{
if (name == null)
return false;
await InternalGreeter.GreetAsync(name);
return true;
}
public async Task GreetAllAsync()
{
var tasks = UserNames.Select(un => GreetAsync(un)).ToList();
while(tasks.Any())
{
var finished = await Task.WhenAny(tasks);
if(finished.Result)
{
//Here's what I'd like to achieve
var username = finished.Arguments[0];
WriteLine($"User {username} has been greeted.");
}
tasks.Remove(finished);
}
}
根据此示例。
在我的真实场景中,我有一个客户列表,我必须逐一遍历它们并更新远程服务器上的信用状态(远程服务器不支持批量更新)。 在每个客户更新完成后,我必须在数据库中标记该客户已获得认证。
UserNames.Select(un => GreetAsync(un)).ContinueWith(...).ToList();
? - DavidGTask
有一个AsyncState
属性,它代表着状态对象,作为第二个参数传递给Task
构造函数或ContinueWith
,但你没有使用任何一个。 - Collin Dauphinee