> foreach (Match match in (new Regex(pattern).Matches(data))) > { > time = match.Groups[1].Value; > } The first thing you should change is this loop. You don't need it as there is only one match on that page. Then you can use the static `Regex.Match` to find the data and you can use a named group instead of the `1` so this could be refactored to a method that actually does nothing else but returning the time string. It should not display the time yet. This means that the return type is not `void` any more (which should be used only for event handlers anyway) but a `Task<string>` (in case of a `void` it should just be `Task`). private static async Task<string> GetTime() { Console.WriteLine("Entered getTime"); try { varpattern = @"<tr><td colspan=2 align=""center"" bgcolor=""#FFFFFF""><h5>(?<Data>[^>]*)</td></tr>"; var getTime = Task.Run(async () => { varwebsite = "http://www.worldtimezone.com/time/wtzresult.php?CiID=1225&forma=Find%20Time"; using (var client = new HttpClient()) using (var response = await client.GetAsync(website)) using (var content = response.Content) { string data = await content.ReadAsStringAsync(); return Regex.Match(data, pattern).Groups["Data"].Value; } }); return await getTime; } catch (Exception ex) { Console.WriteLine($"getTime Error: {ex.ToString()}"); return null; } } --- The rest of it should be implemented in the `InitializeClock` method that now reqruies a `startTime` and creates an instance of a `Clock` if everything went fine: private static void InitializeClock(string startTime) { DateTime datetime; if (DateTime.TryParse(startTime, out datetime)) { Console.WriteLine(datetime.ToString("hh:mm:ss")); Console.WriteLine(datetime.Date.ToString("dd/MM/yyyy")); clock = new Clock(datetime); } else { Debug.WriteLine("Invalid Format"); } } --- The last change is inside the clock. Instead of running a `while(true)` loop you should use a `Timer` that will tick every second. This is just an example and the clock should not actually write to the console itself. You might want to pass it a service via DI or you might have an entirely different idea depending on your actual solution. class Clock { private readonly DateTime _startTime; private double _offset; private readonly System.Timers.Timer _timer; public Clock(DateTime startTime) { _startTime = startTime; _timer = new System.Timers.Timer(1000); _timer.Elapsed += (sender, e) => { _offset++; DisplayTime(); }; _timer.Start(); } public void DisplayTime() { Console.WriteLine(_startTime.AddSeconds(_offset).ToString("hh:mm:ss")); } } --- The new `Main` would then just pass the time string to the `DisplayTime` method: var time = GetTime(); Task.Run(async () => InitializeClock(await time)); --- Now you don't need any additional data structures like the `TimeAndDate` and splitting the time into pieces and calculate the hour or minute part yourself.