Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#.NET 4.0中为异步调用指定CancellationTokenSource超时_C#_.net_.net 4.0 - Fatal编程技术网

在C#.NET 4.0中为异步调用指定CancellationTokenSource超时

在C#.NET 4.0中为异步调用指定CancellationTokenSource超时,c#,.net,.net-4.0,C#,.net,.net 4.0,我正在尝试使用固定超时从Azure下载blob。我在.NET4.5中有以下工作代码。但是,当我尝试在.NET 4.0中重写时,我找不到一种方法来指定CancellationTokenSource的超时。你能帮忙吗 var cts = new CancellationTokenSource((int)TimeSpan.FromSeconds(30).TotalMilliseconds); using (var memoryStream = new System.IO.MemoryStream()

我正在尝试使用固定超时从Azure下载blob。我在.NET4.5中有以下工作代码。但是,当我尝试在.NET 4.0中重写时,我找不到一种方法来指定CancellationTokenSource的超时。你能帮忙吗

var cts = new CancellationTokenSource((int)TimeSpan.FromSeconds(30).TotalMilliseconds);

using (var memoryStream = new System.IO.MemoryStream())
{
    Task task = blockBlob.DownloadToStreamAsync(memoryStream, cts.Token);
    await task.ConfigureAwait(false);

    ...
}
此外,如果在指定时间内未下载blob,我发现以下代码(在4.0中)将超时。我不确定在使用它时是否有什么需要小心的地方

Task task = blockBlob.DownloadToStreamAsync(memoryStream);
task.Wait((int)TimeSpan.FromSeconds(30).TotalMilliseconds);

AFAIK无法指定4.5框架之前的CancellationTokenSource超时。我建议您使用下一种方法

var cts = new CancellationTokenSource();
var timer = new System.Timers.Timer(timeout) {AutoReset = false};
timer.Elapsed += (sender, eventArgs) => { cts.Cancel(); };
var task = new Task(action, cts.Token);
task.Start();
timer.Start();

笨手笨脚的,但工作正常

谢谢!我编辑了原始帖子,以显示我正在使用的代码。我不确定是否有什么我应该小心的。