Parallel Asynchronous I/O
simple example
public async Task SimpleParallelWriteAsync() 
{
    string folder = Directory.CreateDirectory("tempfolder").Name;
    IList<Task> writeTaskList = new List<Task>();
    for (int index = 11; index <= 20; ++ index) 
    {
        string fileName = $"file-{index:00}.txt";
        string filePath = $"{folder}/{fileName}";
        string text = $"In file {index}{Environment.NewLine}";
        writeTaskList.Add(File.WriteAllTextAsync(filePath, text));
    }
    await Task.WhenAll(writeTaskList); // This will write all 10 files in parallel.
}
fine control example
public async Task ProcessMultipleWritesAsync()
{
    IList<FileStream> sourceStreams = new List<FileStream>();
    try
    {
        string folder = Directory.CreateDirectory("tempfolder").Name;
        IList<Task> writeTaskList = new List<Task>();
        for (int index = 1; index <= 10; ++ index)
        {
            string fileName = $"file-{index:00}.txt";
            string filePath = $"{folder}/{fileName}";
            string text = $"In file {index}{Environment.NewLine}";
            byte[] encodedText = Encoding.Unicode.GetBytes(text);
            var sourceStream = 
                new FileStream(
                    filePath,
                    FileMode.Create, FileAccess.Write, FileShare.None,
                    bufferSize: 4096, useAsync: true);
            Task writeTask = sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
            sourceStreams.Add(sourceStream);
            writeTaskList.Add(writeTask);
        }
        await Task.WhenAll(writeTaskList);
    }
    finally
    {
        foreach (FileStream sourceStream in sourceStreams)
        {
		  // Close all the FileStreams.  If a using statement was used, the FileStream may be
		  // disposed of before the task was complete:
            sourceStream.Close();
        }
    }
}