我有一個RenderReport生成 PDF 檔案(byte[])的方法。這有時會無限期地掛起。成功后完成時間不應超過 15 秒。因此,我使用 aTaskCompletionSource來限制執行時間并TimeoutException在它超過超時時拋出 a 。
但是,我無法確定的是:您如何在以下代碼中提供回傳的byte[]檔案?回傳一個布林值而不是檔案,那么你從哪里得到檔案?RenderReportSetResultlongRunningTask.Wait
我不想使用longRunningTask.Result,因為它會
所以這只是一種方法,但這有幫助嗎?
using System;
using System.Threading;
using System.Threading.Tasks;
namespace task_completion
{
class Program
{
static void Main(string[] args)
{
runAsync();
Console.ReadKey();
}
static async void runAsync()
{
// Normal
await longRunningByteGetter(1000, new CancellationTokenSource(2000).Token)
.ContinueWith((Task<byte[]> t)=>
{
switch (t.Status)
{
case TaskStatus.RanToCompletion:
var bytesReturned = t.Result;
Console.WriteLine($"Received {bytesReturned.Length} bytes");
break;
default:
Console.WriteLine(nameof(TimeoutException));
break;
}
});
// TimeOut
await longRunningByteGetter(3000, new CancellationTokenSource(2000).Token)
.ContinueWith((Task<byte[]> t) =>
{
switch (t.Status)
{
case TaskStatus.RanToCompletion:
var bytesReturned = t.Result;
Console.WriteLine($"Received {bytesReturned.Length} bytes");
break;
default:
Console.WriteLine(nameof(TimeoutException));
break;
}
});
}
async static Task<Byte[]> longRunningByteGetter(int delay, CancellationToken token)
{
await Task.Delay(delay, token); // This is a mock of your file retrieval
return new byte[100];
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478914.html
