Exceção não tratada: System.AggregateException: Um ou mais erros ocorreram. ---> System.IO.IOException: O arquivo "C:\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat" está sendo usado por outro processo, então este arquivo não pode ser acessado. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) No System.IO.FileStream.Init(String path, modo FileMode, acesso FileAccess, direitos Int32, Boolean useRights, compartilhamento FileShare, Int32 bufferSize, opções FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) No System.IO.FileStream: ctor(String path, modo FileMode, acesso FileAccess, compartilhamento FileShare) No System.IO.File.Open(String path, modo FileMode, acesso FileAccess) Em ConsoleApp1.FileReadHelper.SingleFile(String path) localização C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: linha número 27 Em ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(String x) Posição C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: Linha número 68 Em System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1() Em System.Threading.Tasks.Task.InnerInvokeWithArg(TaskChildTask) Em System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Objeto) --- Fim do traço interno da pilha de exceções --- Em System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) Em System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) Em System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 paraExclusive, ParallelOptions, parallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localFinally) Em System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable'1 source, ParallelOptions, Action'1 body, Action'2 bodyWithState, Action'3 corpoWithStateAndIndex, Func'4 bodyWithStateAndLocal, Func'5 bodyWithEverything, Func'1 localInit, Action'1 localFinally) em System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 fonte, corpo Action'1) No ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) no local C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: linha número 66 Em ConsoleApp1.Program.Main(String[] args) posição C:\project\my\TestNet\ConsoleApp1\Program.cs: linha número 73 Por favor, pressione qualquer tecla para continuar...
O erro é óbvio, ou seja, o arquivo não pode ser acessado, o arquivo não pode ser lido, o que é uma exceção sob multithreading
Li como o documento está escrito:
Só defini o modo de leitura, não o modo de escrita, e percebi que no modo multithreading, ainda haverá um erro, não é só leitura?
Se for somente leitura, não deve ser um erro
Solução:
Isso deveria estar lendo arquivos em modo somente leitura, testei e descobriu que não é um erro, e que o mesmo arquivo pode ser lido ao mesmo tempo em múltiplas threads
|