首页 > 解决方案 > 如何覆盖 System.IO.Stream .OpenRead() 上的超时值:获取 ReadTimeout 引发了“System.InvalidOperationException”类型的异常

问题描述

我正在尝试将 Azure 云文件转换为流:

System.IO.Stream stream = cloudFile.OpenRead();

该行引发此错误:

ReadTimeout = 'stream.ReadTimeout' 引发了“System.InvalidOperationException”类型的异常

如果我正确阅读本文档([Stream.ReadTimeout Property][1]),看起来我应该能够覆盖默认超时值,但我不知道如何做到这一点。我一直在这里查看很多关于此的其他线程:

C# Stream.ReadTimeout 属性

C# Stream.Read 超时

流读/写超时导致无效操作异常

...仅举几例。但到目前为止,我还没有在其中任何一个中找到解决方案。

注意:我读过的一些线程说这个错误只会在调试时发生在 VS 中。但是,当此 Azure Function 应用程序发布到 Azure 并在生产中执行时,我们在完全相同的行上得到完全相同的错误。

我的问题是:如何将超时值设置为OpenRead()比默认值更长的时间?(或者……我看错了吗?)

标签: c#.net

解决方案


我认为您需要在 blob 的 OpenRead 中应用超时,如下所示

    cloudFile.OpenRead(null, new BlobRequestOptions() {
                ServerTimeout = TimeSpan.MaxValue,
                RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4), MaximumExecutionTime = TimeSpan.FromHours(3)
        });

推荐阅读