using System.Diagnostics;
using System.Threading.Tasks;
public static async Task Main(string[] args)
var stopWatch = Stopwatch.StartNew();
await Test(Actions.TestParallelDownload, itemAmount);
await Test(Actions.TestParallelSaveFile, itemAmount);
await Test(Actions.TestAsyncDownload, itemAmount);
await Test(Actions.TestAsyncSaveFile, itemAmount);
Console.WriteLine("Finish {0}", stopWatch.Elapsed);
Console.WriteLine("Err", ex.Message);
public static async Task Test(Actions action, int itemAmount)
string[] items = Enumerable.Range(0, itemAmount).Select(i => Guid.NewGuid().ToString()).ToArray();
var stopWatch = Stopwatch.StartNew();
case Actions.TestParallelDownload:
items.AsParallel().ForAll(item => DownloadAsync(item));
case Actions.TestParallelSaveFile:
items.AsParallel().ForAll(item => SaveAsync(item));
case Actions.TestAsyncDownload:
foreach (var item in items)
await DownloadAsync(item);
case Actions.TestAsyncSaveFile:
foreach (var item in items)
Console.WriteLine($"{action.ToString()} Call: Time: {stopWatch.Elapsed}");
public static async Task SaveAsync(string textToWrite)
string filePath = @"C:\temp\file2.txt";
byte[] encodedText = Encoding.Unicode.GetBytes(textToWrite);
using (var sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
public static async Task DownloadAsync(string name)
var uri = new Uri("https://images.sftcdn.net/images/t_app-logo-l,f_auto,dpr_auto/p/ce2ece60-9b32-11e6-95ab-00163ed833e7/2183169552/the-test-fun-for-friends-logo.png");
using (var client = new WebClient())
await client.DownloadFileTaskAsync(uri, $"{name}.png");