异步方法同步运行 c#



我正在尝试编写一个异步方法,只为一组较大的日期之间的一组日期执行一些逻辑,但它不是异步运行的。我正在尝试对startDateendDate之间的日期进行逻辑处理,但如果计算时间少于 5 天,则以 5 或更少的块为单位。

因此,从6-1-20186-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);
}

您的Action方法不是异步的。它什么都没await

将对Thread.Sleep的同步调用替换为await Task.Delay

包含await后,编译器将强制您将其声明为异步

public static async Task<DataTable> Action(DateTime one, DateTime two)

最新更新