我在这里有一种非常奇怪的感觉,我错过了一些东西,但现在我已经在这个问题上苦苦挣扎了几个小时,但无法得到它。我有一种任务调度类,它主要接收它启动的正常同步操作,而不是通过 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)