gpt4 book ai didi

c# - 使用递归异步/等待的异常处理

转载 作者:行者123 更新时间:2023-11-30 17:43:58 25 4
gpt4 key购买 nike

考虑以下代码:

void TopLevelCaller() {
RecursiveAwaiter();
}

async Task RecursiveAwaiter() {
var result = await ReceiveDataAsync();
FireEvent(result);
RecursiveAwaiter();
}

假设 ReceiveDataAsync 因异常而失败。是否可以修改代码以在 TopLevelCaller() 中捕获此异常,以便可以在存在 TopLevelCaller() 的类中完成所有错误处理?

让实现者这样处理错误会更好:

void TopLevelCaller() {
try {
RecursiveAwaiter();
} catch (Exception e)
{
// Something went wrong. Handle appropriately.
}
}

比拥有类似的东西:

async Task RecursiveAwaiter() {
try {
var result = await ReceiveDataAsync();
FireEvent(result);
RecursiveAwaiter();
} catch (Exception e) {
FireExceptionEvent(e);
}
}

最佳答案

async void TopLevelCaller()

async void 几乎总是坏主意。它专为 WPF 控件事件而设计。这是即发即忘的功能,因此您将无法捕获 TopLevelCaller 抛出的异常。它应该工作:

async Task TopLevelCaller() {
try {
await RecursiveAwaiter();
} catch (Exception e)
{
// Something went wrong. Handle appropriately.
}
}

关于c# - 使用递归异步/等待的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207790/

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