你可能想用暴露的取消方法令牌,以便您的API可以easliy消耗。
其中一個CancellationTokenSource構造函數將TimeSpan作爲參數。另一方面CancellationToken暴露了Register方法,該方法允許關閉流,讀取操作應該停止並拋出異常。
方法調用
var timeout = TimeSpan.Parse("00:01:00");
var cancellationTokenSource = new CancellationTokenSource(timeout);
var cancellationToken = cancellationTokenSource.Token;
await ReadAsync(stream, cancellationToken);
方法實現
public async Task ReadAsync(Stream stream, CancellationToken cancellationToken)
{
using (cancellationToken.Register(stream.Dispose))
{
var buffer = new byte[1024];
var read = 0;
while ((read = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
// do stuff with read data
}
}
}
下面的代碼,只有當它超時
更要能找到here將部署流。
編輯:
改變.Close()來.Dispose(),因爲它已不再適用於某些PCLS .Close() vs .Dispose()
有沒有辦法用Read()方法來做到這一點還是必須使用ReadAsync()? – gonzobrains
您應該可以通過Read()獲得相同的結果。 – interjaz
我在問,因爲我沒有看到任何採用CancellationToken的Read()方法。 – gonzobrains