Vas*_*zov 0 c# multithreading asynchronous task-parallel-library parse-platform
我正在编写一个 UI 应用程序。如果发生某些异常,我需要在应用程序退出之前做一些工作。所以我订阅了AppDomain.CurrentDomain.UnhandledException
事件。
AppDomain.CurrentDomain.UnhandledException += HandleException;
Run Code Online (Sandbox Code Playgroud)
HandleException
方法执行异步保存到远程(因为没有同步 api)。
private void HandleException(object sender, UnhandledExceptionEventArgs args)
{
foreach (var user in UsersCollection.ToArray())
{
try
{
foreach (var session in user.Sessions.ToArray())
{
try
{
SaveSessionAsync(session).Wait();
}
catch (Exception e)
{
Logger.Error("Can't save session: " + session, e);
}
}
}
catch (Exception e)
{
Logger.Error("Can't save sessions of user " + user, e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序退出之前,我需要确保我保存了所有会话(至少尝试过)。但是如果我把Wait()
它放在那里,我就会陷入僵局,应用程序永远不会停止。据我所知,await
在正常情况下可能会帮助我(当我处于 UI 线程但不在应用程序终止状态时),但await
不会等待应用程序退出。所以我的保存任务可能会中止。但我需要他们完成。
有没有一种方法可以在SaveSessionAsync
不造成死锁的情况下等待有保证的任务完成?
顺便说一句:SaveSessionAsync 里面有 Parse.com API
您只使用了在非async
方法中运行它所需的部分语法。UtilizingTask.Run()
将以异步方式运行它,而无需使用await
.
尝试这个:
Task.Run(() => SaveSessionAsync(session)).Wait();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
853 次 |
最近记录: |