Exception non traitée : System.AggregateException : Une ou plusieurs erreurs sont survenues. ---> System.IO.IOExcetion : Le fichier « C :\SyncTemp\Position\Taxi\2017\09\09\Time\0000.dat » est utilisé par un autre processus, donc ce fichier ne peut pas être consulté. à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) Dans System.IO.FileStream.Init(chemin de chaîne, mode FileMode, accès à FileAccess, droits Int32, DroitsUsage booléens, partage FileShare, BufferSize Int32, options Options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) Dans System.IO.FileStream : ctor(Chemin de chaîne, mode FileMode, accès à FileAccess, partage FileShare) Dans System.IO.File.Open(chemin de chaîne, mode FileMode, accès FileAccess) À ConsoleApp1.FileReadHelper.SingleFile(String path) emplacement C :\project\my\TestNet\ConsoleApp1\FileReadHelper.cs : ligne numéro 27 Dans ConsoleApp1.FileReadHelper.<>c__DisplayClass3_0. <MultipleFilesAsync>b__0(String x) Position C :\project\my\TestNet\ConsoleApp1\FileReadHelper.cs : Ligne numéro 68 Dans System.Threading.Tasks.Parallel.<>c__DisplayClass17_0'1. <ForWorker>b__1() Dans System.Threading.Tasks.Task.InnerInvokeWithArg(TaskChildTask) Dans System.Threading.Tasks.Task.<>c__DisplayClass176_0. <ExecuteSelfReplicating>b__0(Objet) --- Fin de la --- de trace interne de la pile d’exceptions Dans System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) Dans System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) Dans System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 versExclusive, ParallelOptions, ParallelOptions, Action'1 body, Action'2 bodyWithState, Func'4 bodyWithLocal, Func'1 localInit, Action'1 localFinally) Dans 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 localFinally) à System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable'1 source, Action'1 corps) Dans ConsoleApp1.FileReadHelper.MultipleFilesAsync(IEnumerable'1 path) à l’emplacement C :\project\my\TestNet\ConsoleApp1\FileReadHelper.cs : ligne numéro 66 À ConsoleApp1.Program.Main(String[] args) position C :\project\my\TestNet\ConsoleApp1\Program.cs : ligne numéro 73 Veuillez appuyer sur n’importe quelle touche pour continuer...
L’erreur est évidente, c’est-à-dire que le fichier ne peut pas être accédé, le fichier ne peut pas être lu, ce qui constitue une exception dans le multithreading
J’ai lu comment le document est rédigé :
Je n’ai défini que le mode lecture, pas le mode écriture, et j’ai constaté qu’en multithreading, il y aura toujours une erreur, ce n’est pas en lecture seule ?
Si c’est en lecture seule, cela ne devrait pas être une erreur
Solution:
Cela devrait lire les fichiers en mode lecture seule, l’avoir testé, et constaté que ce n’est pas une erreur, et que le même fichier peut être lu en même temps sous plusieurs threads
|