在app.xaml.cs
中 private void Application_Closing(object sender, ClosingEventArgs e)
{
A.onEndApp();
}
在A班
async public static void onEndApp()
{
string temp=await doSomething();
//code here
}
我遇到问题,当我关闭某个应用时,然后运行onEndApp()
方法,
当doSomething()
运行完成且{//code here}
未运行时,但是如果我放入A.onEndApp()
它运行的另一种方法是正常运行,例如Application_Launching()
方法,它将被运行
{//code here}
我认为当应用程序运行时没问题,但是当应用程序关闭时,运行等待完成然后停止,我想在异步关闭应用程序时运行完整方法。
答案 0 :(得分:1)
执行Application_Closing(同步)后,操作系统将终止该过程。 可能在此之前是短暂的延迟,并且可能足以让您完成对隔离存储的写入,或者在这种情况下您可能 。最终会有腐败的状态
我只是直接引用" Beware the perils of async/await in application lifecycle event handlers (in fact in any event handlers)"在Andy Wigley的博客上。
从Application_Deactivated或Application_Closing
调用异步代码这里的指导是“不要'”。如果您仔细编写应用程序,可以随时保存对持久数据的更改,因此您不应该在应用程序生命周期事件中做任何事情。
如果必须,你可以尝试这样做:
SomeAsyncMethod()。AsTask()。Wait()
如果操作在超时期限内完成,并且由于需要而没有死锁 要抽取UI线程,它会起作用......但不要指望它。
答案 1 :(得分:-1)
试试这个:
private void Application_Closing(object sender, ClosingEventArgs e)
{
var task = A.onEndApp();
task.Wait();
}
async public static Task onEndApp()
{
string temp = await doSomething();
//code here
}
否则,你实际上只是分离一个永远不会有机会运行完成的线程,因为应用程序正在从它下面关闭,并且线程将在它运行之前被终止。