小编Pro*_*rus的帖子

为什么不等待我传递给 Task.Run() 的异步操作?

我在这里有一种非常奇怪的感觉,我错过了一些东西,但现在我已经在这个问题上苦苦挣扎了几个小时,但无法得到它。我有一种任务调度类,它主要接收它启动的正常同步操作,而不是通过 Task.Run() 异步操作。但是,当它收到传递的异步操作时,它会返回而不等待等待任务。我将其简化为以下示例:

private async void Button_OnClick(object sender, RoutedEventArgs e)
{
    Logger("Click event received");
    await OperationProcessor(async () =>
    {
        Logger(">>> Starting ACTION, waiting 5 seconds");
        await Task.Delay(5000);
        Logger(">>> ACTION finished");
    });
    Logger("Click event finished");
}

private static async Task OperationProcessor(Action operation)
{
    Logger("Processing started, waiting a second");
    await Task.Delay(1000);
    Logger("Launching action");
    await Task.Run(operation);
    Logger("Returned from action, waiting another second");
    await Task.Delay(1000);
    Logger("Processing finished");
}

private static void Logger(string message)
{
    Console.WriteLine($"{DateTime.Now:dd.MM.yy HH:mm:ss} [{Thread.CurrentThread.ManagedThreadId}] {message}");
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

1: 16.07.19 10:58:06 [1] …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous task

2
推荐指数
1
解决办法
1551
查看次数

标签 统计

.net ×1

asynchronous ×1

c# ×1

task ×1