Task.Run(): работа с разделяемыми ресурсами

159
17 мая 2018, 13:30

Есть код

class Program
{
    static void Main(string[] args)
    {
        string filePath = @"c:\test\test.txt";
        string tempPath = Path.GetTempPath();
        Task.WaitAll(Enumerable.Range(1, 20)
                 .Select(i => Task.Run(() =>
            {
                var destFilePath = Path.Combine(tempPath, $"{i.ToString()}.txt");
                File.Copy(filePath, destFilePath);
                //... process destFile
            })).ToArray());
        Debug.WriteLine(tempPath);
    }
}

где просиходит создание копий файла test.txt и их обработка в многопоточном режиме. Здесь сразу хочется отметить свое понимание разницы между многопоточно и паралельно: если при создании очередно потока, окажеться свободным одно из ядер процесса, то обработка очередной копии файла и во все будет запущенна параллельно.

Вопрос

Сейчас ведь в различных потоках идет доступ к разделяемому ресурсу test.txt и никакой синхронизации потоков я не делаю как видите и почему тогда все проходит гладко и никаких exception нет? Или Task.WaitAll() сам делает синхронизацию?

READ ALSO
Как читать файлы с ext4 ?

Как читать файлы с ext4 ?

Подскажите существует ли библиотеки для работы с ext3/ext4, или как встроить в свою программу какие нибудь механизмы чтобы можно было читать...

203
Выводит ошибку помогите, что делать? [требует правки]

Выводит ошибку помогите, что делать? [требует правки]

ArgumentOutOfRangeException: startIndex + count > thislength Parameter name: count System

189
Как работать с событием SelectionChanged элемента TabControl WPF?

Как работать с событием SelectionChanged элемента TabControl WPF?

Есть три вкладки у элемента TabControl, на каждой из них есть DataGrid, информация в котором периодически обновляетсяКак сделать так, что при смене...

310
C# WPF проверка CheckBox по нумерации

C# WPF проверка CheckBox по нумерации

Доброе время суток! Хочу создать окно авторизации, при условии что CheckBox должны быть выделены по очередности

218