Skip to content

FileStream.ReadAsync() with isAsync: true is throwing IOException #54143

@X9VoiD

Description

@X9VoiD

Description

FileStreams opened with isAsync: true fails to perform asynchronous read operations. Not specifying isAsync: true runs completely fine.

The function used to get a FileStream:

private void InitializeFileStream(string filePath, bool exclusive, int readSize, int writeSize)
{
    FileAccess access = 0;
    if (readSize > 0)
        access |= FileAccess.Read;
    if (writeSize > 0)
        access |= FileAccess.Write;

    FileShare share = exclusive ? FileShare.None : (FileShare)access;
    FileStream = new FileStream(filePath, FileMode.Open, access, share, Math.Max(readSize, writeSize), true);
}

Run loop of the task:

private async void ReadPoll()
{
    while (_run)
    {
        int bytesReturned = await FileStream!.ReadAsync(_readBuffer);
        OnInput(_readBuffer.Slice(0, bytesReturned));
    }
}

Configuration

OS Version Windows 10 21H1
.NET Version .NET 6 preview 4

Regression?

I'm not sure...

Other information

Exception has occurred: CLR/System.IO.IOException
An exception of type 'System.IO.IOException' occurred in System.Private.CoreLib.dll but was not handled in user code: 'Incorrect function. : '\\?\hid#vid_28bd&pid_0906&mi_02#7&194ad48b&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}''
   at System.IO.Strategies.FileStreamHelpers.GetFileLength(SafeFileHandle handle, String path)
   at System.IO.Strategies.WindowsFileStreamStrategy.get_Length()
   at System.IO.Strategies.AsyncWindowsFileStreamStrategy.ReadAsyncInternal(Memory`1 destination, CancellationToken cancellationToken)
   at System.IO.Strategies.AsyncWindowsFileStreamStrategy.ReadAsync(Memory`1 destination, CancellationToken cancellationToken)
   at System.IO.Strategies.BufferedFileStreamStrategy.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken)
   at System.IO.FileStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken)

The source repo is currently private, but if more information or testing is needed from my side then I'll do it willingly.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions