-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
我正在尋找一種方法,不需要我在主線程異步執行方法,並且還要等待後臺線程的執行完成。 –