gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:18 27 4
gpt4 key购买 nike

鉴于以下情况:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com