gpt4 book ai didi

c# - 在 UI 构造函数中使用 Task.Run() 时处理异常

转载 作者:行者123 更新时间:2023-11-30 21:55:50 25 4
gpt4 key购买 nike

我有一个调用 Task.Run() 的构造函数,如下所示:

public MyPage() {
Task.Run(() => {
MyHeavyCpuMethod();
});
}

这里,MyPage() 是 UI 组件的构造函数,我不想让 MyHeavyCpuMethod() 在我的 UI 线程上运行,所以我卸载了它使用 Task.Run() 以一种即发即弃的方式,因为我并不真正关心 MyHeavyCpuMethod() 何时完成。

但是,如果 MyHeavyCpuMethod() 抛出,我无法处理返回任务中的异常。

在这种情况下我该如何处理错误?

最佳答案

一种选择是使用 async/await...,它不适用于构造函数,但可以在静态方法中工作:

public static async Task<MyPage> CreateInstance()
{
await Task.Run(...);
// Anything else asynchronous you want to use
return new MyPage();
}

然后假设您从异步方法中使用它,您可以只使用:

MyPage page = await MyPage.CreateInstance();

那样的话,如果受 CPU 限制的任务失败,您甚至无法调用构造函数。此处构造函数调用本身应该很快,因为它在 UI 线程上(如您所愿)。

另一种方法是,您可以将 Task.Run 返回的任务存储为页面中的一个字段,然后等待构建后...使用正常的异步异常处理方法.

关于c# - 在 UI 构造函数中使用 Task.Run() 时处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886276/

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