我试图编写一个异步方法,以便在一组较大的日期之间为一组日期执行一些逻辑,但它不是异步运行的。我试着在这段时间里
startDate
和
endDate
,但如果要计算的时间少于5天,则以5个或更少的块为单位。
所以从
6-1-2018
到
6-29-2018
总共有5个块要进行逻辑操作。我试图同时为每个块触发一个异步方法。
执行每个任务的总时间应该在5秒左右,因为任务只是休眠5秒。它目前正在运行30秒,这意味着它
不
异步,但同步。我如何修复它以便可以异步运行这些操作?
public async static void Foo()
{
var watch = System.Diagnostics.Stopwatch.StartNew();
List<Task> tasks = new List<Task>();
DateTime endDate = new DateTime(2018, 6, 29);
int dayIntervals = 4; // Query 5 days at a time
for (DateTime startDate = new DateTime(2018, 6, 1); startDate.Date <= endDate.Date; startDate = startDate.AddDays(dayIntervals + 1))
{
dayIntervals = (startDate.AddDays(dayIntervals) > endDate ? dayIntervals = endDate.Day - startDate.Day : dayIntervals);
tasks.Add(Action(startDate, startDate.AddDays(dayIntervals))); // Add the tasks
}
await Task.WhenAll(tasks); // Fire them asynchronously?
watch.Stop();
var elapsed = TimeSpan.FromMilliseconds(watch.ElapsedMilliseconds).TotalSeconds;
Debug.WriteLine("Finished in: " + elapsed + " seconds"); // 30 sec
}
public static Task<DataTable> Action(DateTime one, DateTime two)
{
// Junk related to the table to be returned
// ...
Random r = new Random();
Thread.Sleep(5000);
return Task.FromResult(table);
}