使用WebRequest运行Uri的并行验证

时间:2017-06-29 14:00:35

标签: c# wpf multithreading task-parallel-library

我们说我有更多的Uri's。如果可以访问,我需要验证。

public RelayCommand TestConnectionCommand => new RelayCommand(async () =>
    {
        var res1 = await ValidateUriAsync(uri);
        var res2 = await ValidateUriAsync(uri);


    });

private async Task<bool> ValidateUriAsync(Uri uri)
    {
        try
        {
            var request = WebRequest.CreateHttp(uri);
            var result = await request.GetResponseAsync();
            return true;
        }
        catch (Exception e)
        {
            return false;
        }
    }

当程序第一次等待时,验证uri需要一些时间,在得到结果后,我可以在View上显示结果。然后程序接下来我验证第二个uri。我想在没有等待的情况下做到这一点。我在考虑使用Begin / EndGetResponse。我需要在View上显示每个验证的结果。验证成功/失败。

非常感谢您的建议。

1 个答案:

答案 0 :(得分:3)

使用等待时,停止执行直到任务返回,而不是等待所有任务完成:

var task1 = ValidateUriAsync(uri);
var task2 = ValidateUriAsync(uri);

await Task.WhenAll(task1, task2);

或等到第一次出错:

var tasks = new List<Task>
{
    ValidateUriAsync(), ValidateUriAsync(uri)
};

while (tasks.Any())
{
    var t = await Task.WhenAny(tasks);

    if (t.IsFaulted)
    {
        //Faulty
        break;
    }

    tasks.Remove(t);
}