Solve task 2

This commit is contained in:
Manuel Thalmann 2024-03-01 14:39:04 +01:00
parent fad3634a3d
commit 183939309e

View file

@ -16,6 +16,7 @@ using System.Net.Security;
using System.Diagnostics; using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Threading; using System.Threading;
using System.Buffers;
namespace DT2 { namespace DT2 {
public enum CallMode { Sync, Async, AsyncTimeout }; public enum CallMode { Sync, Async, AsyncTimeout };
@ -93,18 +94,29 @@ namespace DT2 {
return size; return size;
} }
/* TO BE DONE */ GetUrlAsync(string url) { public async Task<int> GetUrlAsync(string url) {
PageStart(url); PageStart(url);
/* TO BE DONE */ int size = await Task.Run(() => GetPageSize(url));
PageLoaded(url, size); PageLoaded(url, size);
return size; return size;
} }
/* TO BE DONE */ GetUrlAsyncTimeout(string url, int millis) { public async Task<int> GetUrlAsyncTimeout(string url, int millis) {
int size;
PageStart(url); PageStart(url);
/* TO BE DONE */ Task<int> task = Task.Run(() => GetPageSize(url));
// PageLoaded or Timeout Event try {
size = await task.WaitAsync(TimeSpan.FromMilliseconds(millis));
PageLoaded(url, size);
}
catch (TimeoutException)
{
Timeout(url);
size = 0;
}
return size;
} }
@ -112,6 +124,14 @@ namespace DT2 {
// get a list of web addresses. // get a list of web addresses.
int totalSize = 0; int totalSize = 0;
Stopwatch sw = Stopwatch.StartNew(); Stopwatch sw = Stopwatch.StartNew();
Action<Func<string, Task<int>>> asyncRunner = (implementation) =>
{
Task<int[]> task = Task.WhenAll(urlList.Select((url) => implementation(url)));
task.Wait();
totalSize = task.Result.Sum();
};
if (callMode == CallMode.Sync) { if (callMode == CallMode.Sync) {
Console.WriteLine("\nCalling Sync"); Console.WriteLine("\nCalling Sync");
foreach (var url in urlList) { foreach (var url in urlList) {
@ -120,11 +140,11 @@ namespace DT2 {
} }
else if (callMode == CallMode.Async) { else if (callMode == CallMode.Async) {
Console.WriteLine("\nCalling Async"); Console.WriteLine("\nCalling Async");
/* TO BE DONE */ asyncRunner.Invoke(GetUrlAsync);
} }
else if (callMode == CallMode.AsyncTimeout) { else if (callMode == CallMode.AsyncTimeout) {
Console.WriteLine("\nCalling Async Timeout"); Console.WriteLine("\nCalling Async Timeout");
/* TO BE DONE */ asyncRunner.Invoke((url) => GetUrlAsyncTimeout(url, 100));
} }
LoadSummary("Total", totalSize, (int)sw.Elapsed.TotalMilliseconds); LoadSummary("Total", totalSize, (int)sw.Elapsed.TotalMilliseconds);
} }