using System.Threading.Tasks;
namespace Synchronization
static void Main(string[] args)
var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(3));
Task<string> task = PerformLongRunningTaskAsync(cancellationTokenSource.Token);
Console.WriteLine("Waiting for the task to complete...");
string result = task.GetAwaiter().GetResult();
Console.WriteLine($"Task result: {result}");
catch (TaskCanceledException)
Console.WriteLine("Task was canceled.");
private static async Task<string> PerformLongRunningTaskAsync(CancellationToken cancellationToken)
var taskCompletionSource = new TaskCompletionSource<string>();
return await taskCompletionSource.Task;