C# 等待应用程序从UI线程退出时的异步任务

C# 等待应用程序从UI线程退出时的异步任务,c#,multithreading,asynchronous,parse-platform,task-parallel-library,C#,Multithreading,Asynchronous,Parse Platform,Task Parallel Library,我正在写一个UI应用程序。如果发生异常,我需要在应用程序退出之前做一些工作。 所以我订阅了AppDomain.CurrentDomain.UnhandledException事件 AppDomain.CurrentDomain.UnhandledException += HandleException; HandleException方法执行到远程的异步保存(因为没有同步api) 在应用程序退出之前,我需要确保保存了所有会话(至少已尝试)。但如果我把Wait()放在那里,就会出现死锁,应用程序

我正在写一个UI应用程序。如果发生异常,我需要在应用程序退出之前做一些工作。 所以我订阅了
AppDomain.CurrentDomain.UnhandledException
事件

AppDomain.CurrentDomain.UnhandledException += HandleException;
HandleException
方法执行到远程的异步保存(因为没有同步api)

在应用程序退出之前,我需要确保保存了所有会话(至少已尝试)。但如果我把
Wait()
放在那里,就会出现死锁,应用程序永远不会停止。 据我所知,
await
在正常情况下(当我处于UI线程而不是应用程序终止状态时)可能会帮助我,但
await
不会在应用程序退出时等待。因此,我的保存任务可能会中止。但我需要他们完成

是否有一种方法可以在不造成死锁的情况下等待任务的保证完成


顺便说一句:SaveSessionAsync内部有Parse.com API

您只使用了在非
异步
方法中运行它所需的部分语法。使用
Task.Run()
将以异步方式运行它,而无需使用
wait

试试这个:

Task.Run(() => SaveSessionAsync(session)).Wait();

您只使用了在非
async
方法中运行它所需的部分语法。使用
Task.Run()
将以异步方式运行它,而无需使用
wait

试试这个:

Task.Run(() => SaveSessionAsync(session)).Wait();
如果没有一个可靠地再现问题的好答案,就不可能知道这个问题的好答案是什么。但是,一般来说,
UnhandledException
事件本身并不用于异常处理。它扮演着类似于终结器的角色,即作为错误代码的后盾。您应该在
try
/
catch
块中等待异步操作,以便异常不会未处理。然后你可以在那里的
catch
子句中进行清理工作。如果没有可靠地重现问题的好答案,就不可能知道这个问题的好答案是什么。但是,一般来说,
UnhandledException
事件本身并不用于异常处理。它扮演着类似于终结器的角色,即作为错误代码的后盾。您应该在
try
/
catch
块中等待异步操作,以便异常不会未处理。然后可以在那里的
catch
子句中执行清理工作。