Neupravená výjimka: System.AggregateException: Došlo k jedné nebo více chybám. ---> System.IO.IOException: Soubor "C:\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat" je používán jiným procesem, takže k tomuto souboru nelze přistupovat. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) V System.IO.FileStream.Init(Cesta řetězce, režim FileMode, přístup k Souboru, práva Int32, Booleovská useRights, sdílené dílo souborů, Int32 bufferSize, možnosti Souboru SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) V System.IO.FileStream: ctor(Cesta k řetězci, režim FileMode, přístup k FileAccess, sdílení FileShare) V System.IO.File.Open (Cesta řetězce, režim FileMode, přístup k FileAccess) Na adrese ConsoleApp1.FileReadHelper.SingleFile(String path) C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: řádek číslo 27 V ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(String x) Pozice C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: Řádek číslo 68 V System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1() In System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) V System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Objekt) --- Konec interního stopového stopování výjimek --- In System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) In System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) In System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localFinally) In System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable'1 source, ParallelOptions, Action'1 body, Action'2 bodyWithState, Action'3 bodyWithStateAndIndex, Func'4 bodyWithStateAndLocal, Func'5 bodyWithEverything, func'1 localInit, Action'1 localTFinally) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 source, Action'1 body) In ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) na místě C:\project\my\TestNet\ConsoleApp1\FileReadHelper.cs: řádek číslo 66 Na ConsoleApp1.Program.Main(String[] args) pozice C:\project\my\TestNet\ConsoleApp1\Program.cs: řádek číslo 73 Pro pokračování stiskněte prosím jakoukoli klávesu...
Chyba je zřejmá, tedy soubor nelze přečíst, nelze ho přečíst, což je výjimka v rámci multithreadingu
Četl jsem, jak je dokument napsán:
Nastavil jsem jen režim čtení, ne zápis, a zjistil jsem, že i při vícevláknovém režimu se chyba stále objeví, není to jen pro čtení?
Pokud je pouze pro čtení, neměla by to být chyba
Řešení:
Mělo by to být čtení souborů pouze pro čtení, otestoval jsem to a zjistil, že to není chyba, a stejný soubor lze číst současně pod více vlákny
|