Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net Core Async Await未继续执行_C#_Asp.net Core_Async Await - Fatal编程技术网

C# .Net Core Async Await未继续执行

C# .Net Core Async Await未继续执行,c#,asp.net-core,async-await,C#,Asp.net Core,Async Await,我有一个任务列表,它将restfully调用Web服务。我在调用downloadTasksQuery.ToList时开始执行它们。在这一点上,我希望在每个任务完成时对其进行处理,并在完成后将距离添加到数据库中 当我在控制台里看这个的时候。所有记录似乎都同时打印到控制台,我看到了这一行的输出。Console.WriteLine谷歌距离:+d.Google\u距离 它打印到控制台的次数是要开始的任务列表中的次数 IEnumerable<Task<Distances>> dow

我有一个任务列表,它将restfully调用Web服务。我在调用downloadTasksQuery.ToList时开始执行它们。在这一点上,我希望在每个任务完成时对其进行处理,并在完成后将距离添加到数据库中

当我在控制台里看这个的时候。所有记录似乎都同时打印到控制台,我看到了这一行的输出。Console.WriteLine谷歌距离:+d.Google\u距离

它打印到控制台的次数是要开始的任务列表中的次数

IEnumerable<Task<Distances>> downloadTasksQuery =
    (from tup in urlList select ProcessURL(tup));

List<Task<Distances>> downloadTasks = downloadTasksQuery.ToList();

while (downloadTasks.Count > 0)
{
    Task<Distances> thisFinished = await Task.WhenAny(downloadTasks);

    downloadTasks.Remove(thisFinished);
    try
    {
        Distances d = await thisFinished;
        if (d.has_error == false)
        {
            dr.Add(d);
        }
        else
        {
            dr.AddError(d);
        }
        Console.WriteLine(" Google Distance : " + d.google_distance);
    }
    catch (Exception e)
    {
        Console.WriteLine("Deleted task, did not save data");
    }
}
进程URL

我建议使用ContinueWith,因为它似乎更适合您正在尝试的工作:

var runningTasks = urlList.Select(tup => ProcessURL(tup)
    .ContinueWith(task =>
    {
        var d = task.Result;
        if (d.has_error)
            dr.AddError(d);
        else
            dr.Add(d);
        Console.WriteLine(" Google Distance : " + d.google_distance);
    }));
await Task.WhenAll(runningTasks);

ProcessURL做什么?请提供一个。@JonSkeet我已经提供了更多详细信息。这似乎更适合继续。显然,第一步是将时间戳添加到所有日志中,并将日志添加到ProcessURL中。也许所有的任务都在同一时间完成?或者控制台被缓冲了?
var runningTasks = urlList.Select(tup => ProcessURL(tup)
    .ContinueWith(task =>
    {
        var d = task.Result;
        if (d.has_error)
            dr.AddError(d);
        else
            dr.Add(d);
        Console.WriteLine(" Google Distance : " + d.google_distance);
    }));
await Task.WhenAll(runningTasks);