gpt4 book ai didi

c# - 在未处理的异常处理程序中异步写入文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:24 25 4
gpt4 key购买 nike

我正在为未处理的异常事件编写处理程序,我们会将异常转储到文件中,然后发送到服务器进行进一步分析。现在我想将异常保存到一个文件中并在下次运行时显示它。从处理程序中我调用了一个函数,它有这样的实现:

public async Task WriteDataAsync(string filename, string data)
{
var file = await this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, data);
}

问题是,如果文件不存在,它会被创建,但异常数据不会保存到文件中。但是,如果文件存在,数据将被正确保存。此函数在未用于处理未处理的异常时有效。
在这件事上我有两个问题。

  1. 在那种情况下出现这种行为的原因是什么。我想这与 async/await 方法的工作方式有关,这在正常情况下是可以的,但在这种情况下处理异常时会出现问题。
  2. 在这种情况下是否有其他异步写入文件的解决方案?我有一个可行的解决方案,即在这种情况下使运行同步运行。

    public void WriteDataAsync(string filename, string data)
    {
    var fileTask = this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting).AsTask();
    var writingToFileTask = FileIO.WriteTextAsync(fileTask.Result, data).AsTask();
    writingToFileTask.Wait();
    }

    我也有一个想法,在写作之前创建文件。但是,数据并没有再次写入文件。

最佳答案

What is the reason for such behavior in that context. I guess it has to do with way the async/await methods works.

你猜对了。当我们调用 await 方法时,它会将控制权返回给异步方法的调用者。在此上下文中,控件将最终返回到 Windows 运行时。通常在触发 UnhandledException 事件后,Windows 运行时将终止应用程序。因此,应用程序有可能在异步操作完成其工作之前终止。这可能会导致您所看到的行为。

Are there other solutions to write to file asynchronously in that context? I have one working solution, which is to make run function synchronously in this case.

对于这种情况,通常我们需要延迟异步操作,如SuspendingDeferral。或 BackgroundTaskDeferral .但是 UnhandledException 事件中没有这样的事情。在这种情况下你的解决方案是正确的,我们可以同步进行这些操作来避免这个问题。可以引用这篇博客:Strategies for Handling Errors in your Windows Store Apps处理未处理的异常。它也使用此解决方案。

关于c# - 在未处理的异常处理程序中异步写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com