任务完成时赋值 属性
Assign property, when Task completes
我想问你:我有密码:
var task1 = await _connectionService.ValidateUriAsync(uri1);
OutputResult("ss", task1);
var task2 = await _connectionService.ValidateUriAsync(uri2);
OutputResult("bb", task2);
var task3 = await _connectionService.ValidateUriAsync(uri3);
OutputResult("cc", task3);
现在我在等待每个任务完成,然后输出结果。但我想 运行 独立完成所有任务(我知道该怎么做)。但我不知道的是,当某些任务完成后,我需要为每个任务输出结果。如果任务失败,输出将是 - 任务 1 失败或任务 1 成功。
我试过这个解决方案,但我必须检查完成了哪个任务及其结果 (true/false)。这很复杂。如果我有 100 个任务,我不能有 100 个条件。
var tasks = new[] {task1, task2, task3};
var process = tasks.Select(async task =>
{
var result = await task;
if(task == task1)assign property
});
await Task.WhenAll(proces);
编辑:
这是 ValidateUriAsync 函数:
public async Task<bool> ValidateUriAsync(Uri uri)
{
try
{
var request = WebRequest.CreateHttp(uri);
var result = await request.GetResponseAsync();
return true;
}
catch (Exception e)
{
return false;
}
}
when some task is completed I need to output result for each task.
不要从"reacting to tasks as they complete"的角度考虑这个问题。相反,将您的 ValidateUriAsync
方法视为 "operation",而您想要的是创建一个新的更高级别 "operation",即 "validate and assign".
有了这样的思路,解决方案就更清晰了——为新的操作引入一个新的async
方法:
private async Task ValidateAndOutputResult(Uri uri, string name)
{
var result = await _connectionService.ValidateUriAsync(uri);
OutputResult(name, result);
}
现在可以调用上层方法,使用Task.WhenAll
:
var tasks = new[]
{
ValidateAndOutputResult(uri1, "ss"),
ValidateAndOutputResult(uri2, "bb"),
ValidateAndOutputResult(uri3, "cc"),
};
await Task.WhenAll(tasks);
我想问你:我有密码:
var task1 = await _connectionService.ValidateUriAsync(uri1);
OutputResult("ss", task1);
var task2 = await _connectionService.ValidateUriAsync(uri2);
OutputResult("bb", task2);
var task3 = await _connectionService.ValidateUriAsync(uri3);
OutputResult("cc", task3);
现在我在等待每个任务完成,然后输出结果。但我想 运行 独立完成所有任务(我知道该怎么做)。但我不知道的是,当某些任务完成后,我需要为每个任务输出结果。如果任务失败,输出将是 - 任务 1 失败或任务 1 成功。 我试过这个解决方案,但我必须检查完成了哪个任务及其结果 (true/false)。这很复杂。如果我有 100 个任务,我不能有 100 个条件。
var tasks = new[] {task1, task2, task3};
var process = tasks.Select(async task =>
{
var result = await task;
if(task == task1)assign property
});
await Task.WhenAll(proces);
编辑: 这是 ValidateUriAsync 函数:
public async Task<bool> ValidateUriAsync(Uri uri)
{
try
{
var request = WebRequest.CreateHttp(uri);
var result = await request.GetResponseAsync();
return true;
}
catch (Exception e)
{
return false;
}
}
when some task is completed I need to output result for each task.
不要从"reacting to tasks as they complete"的角度考虑这个问题。相反,将您的 ValidateUriAsync
方法视为 "operation",而您想要的是创建一个新的更高级别 "operation",即 "validate and assign".
有了这样的思路,解决方案就更清晰了——为新的操作引入一个新的async
方法:
private async Task ValidateAndOutputResult(Uri uri, string name)
{
var result = await _connectionService.ValidateUriAsync(uri);
OutputResult(name, result);
}
现在可以调用上层方法,使用Task.WhenAll
:
var tasks = new[]
{
ValidateAndOutputResult(uri1, "ss"),
ValidateAndOutputResult(uri2, "bb"),
ValidateAndOutputResult(uri3, "cc"),
};
await Task.WhenAll(tasks);