我有調用外部lib同步操作的代碼,這可能需要很長時間才能完成。我不能重寫這個庫,並且沒有一種方法來停止操作。有什麼解決方案可以在超時後停止這項任務嗎?強制取消異步包裝同步任務
我已經試過這段代碼,但它不起作用,因爲我預期。等待直到計算未完成。
我該如何解決這個問題?
private static async Task<ResultData> GetResultAsync(string fileName)
{
var timeoutSource = new CancellationTokenSource(new TimeSpan(0, 5, 0));
try
{
return await Task.Run(() =>
{
var result = ExternLib.Calculate(fileName);
if (result == null)
{
throw new CalculationException(fileName);
}
return result;
},
timeoutSource.Token
).ConfigureAwait(false);
}
catch (AggregateException e)
{
SomeCode(e);
}
catch (OperationCanceledException e)
{
SomeCode2(e);
}
catch (Exception e)
{
SomeCode3(e);
}
return await Task.FromResult<ResultData>(null).ConfigureAwait(false);
}
'return await Task.FromResult(null).ConfigureAwait(false);' - >'return null;' –
@StephenCleary我知道這一點。只有一個例外被捕獲時纔是這種情況。在正常情況下,try塊內的返回值將返回正確的結果。 – Anton