-2
我有一个在后台运行的异步任务。该任务将消息发送到apache kafka服务器。每当网络出现问题时,都会导致异常。但是主线程无法捕捉到这个异常。我需要将来自异步后台任务的异常传递给主线程非异步方法
这是我在后台线程任务中使用代码 -
async SendMessageAsync() {
await Task.WhenAll(sendTasks.ToArray()).ContinueWith(e => e.Exception);
}
虽然我的主线程非异步方法运行像 -
try
{
Message[] messages = { new Message(msg) };
var res = _KafkaProducer.SendMessageAsync(topic, messages, acks, timeout, codec);
}
catch (Exception ex)
{
Console.WriteLine("Here");
}
控制从来就没有到Console.writeLine声明。如果我在主线程中实现task.wait(),那么我的主线程将阻塞,直到我的后台线程完成。有没有其他方法可以做到这一点?我不想让主线程异步的方法。
所以你想异步等待,但不是异步。你不想等待电话结束,但你想等待电话结束捕捉异常? – Default
为什么你需要捕获主线程中的异常?你可能会创建一个封装方法来捕获和处理这个调用吗?或者只是捕获并处理SendMessageAsync中的异常 – Default
我正在寻找一种方法,不需要我在主线程异步执行方法,并且还要等待后台线程的执行完成。 –