c# - 如何取消 FileStream.ReadAsync( ... ) 请求?

标签 c# asynchronous async-await filestream cancellationtokensource

鉴于以下情况:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace CancelAsyncFileReadFailure {
    class Program {
        static void Main( string[ ] args ) {
            Console.WriteLine( Foo( ).Result );
            Console.ReadLine( );
        }

public static async Task<TaskStatus> Foo( ) {
    byte[] bar = new byte[192000]; //Some arbitrarily significant number...
    using ( FileStream FS = new FileSTream( @"Path/To/WarAndPeace.txt", FileMode.Open ) ){
        CancellationTokenSource CTS = new CancellationTokenSource( );       
        Task T = FS.ReadAsync( bar, 0, 192000, CTS.Token );
        CTS.Cancel( );      
        await T;
        return T.Status;
    }
}

T总是完成并返回RanToCompletion

我的用例有点复杂,因为我正在从一个可以随时打开或关闭的设备中读取数据(因此不是直接从文件中读取,而是从安全的文件句柄中读取;但是结果是在这个案例和我的实际用例中都是一样的)。

我想中断(取消)FileStream.ReadToAsync( )。

我怎样才能停止读取它所在的位置并立即取消?

最佳答案

好的,最好在这里回答。

您需要使用 FileOptions.Asynchronous 打开文件。如果不这样做,FileStream 将不会实现真正的取消,并且只会在调用 ReadAsync 时取消 token 时返回已取消的 Task >.

关于c# - 如何取消 FileStream.ReadAsync( ... ) 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325034/

相关文章:

javascript - 了解 Canvas 中的 Javascript 异步 setInterval

c# - 使用长时间运行的方法在 ASP.NET Web 窗体中阻止网页

c# - 为什么在不安全的部分禁止等待?

c# - 有没有办法使用 NPOI/C# 将 HTML 表转换为 xls/xlsx 文件?

c# - Unity3d 绘制曲线以显示向量之间的夹角

c# - 在 select new 中使用 List<> 加入 LINQ

c# - 使用 LINQ 登录到 Twitter

node.js - 这段代码是如何同步的?

c# - 编写一个等待 bool 值的异步方法

c# - C# 中的异步调用不返回结果