Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Program
- {
- static void Main(string[] args)
- {
- var program = new Program();
- program.Test().Wait();
- Console.WriteLine("Press enter to quit.");
- Console.ReadLine();
- }
- public async Task Test()
- {
- await DoWithTimeout(() =>
- {
- Console.WriteLine("Starting main action...");
- System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));
- Console.WriteLine("Finishing main action");
- },
- () => Console.WriteLine("Timeout action is invoked"),
- TimeSpan.FromSeconds(5));
- }
- public async Task DoWithTimeout(Action action, Action timeoutAction, TimeSpan timeout)
- {
- var cancellatinSource = new CancellationTokenSource();
- var task = Task.Run(action, cancellatinSource.Token);
- if (await Task.WhenAny(task, Task.Delay(timeout)) != task)
- {
- cancellatinSource.Cancel();
- timeoutAction();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement