Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- async Task Main()
- {
- var service = new RandomNumberService();
- Console.WriteLine("Requesting number via event...");
- service.RandomNumberProduced += RandomNumberProduced;
- service.RequestRandomNumber();
- Console.WriteLine("Press any key after you get your number");
- Console.ReadLine();
- service.RandomNumberProduced -= RandomNumberProduced;
- Console.WriteLine("Awaiting random number");
- var helper = new RandomHelper(service);
- var result = await helper.RequestRandomNumberAsyc();
- Console.WriteLine(result);
- }
- public void RandomNumberProduced(object sender, RandomNumberProducedEventArgs e)
- {
- Console.WriteLine(e.Number.ToString());
- }
- public class RandomHelper
- {
- private RandomNumberService _service;
- public RandomHelper(RandomNumberService service)
- {
- _service = service;
- }
- public Task<int> RequestRandomNumberAsyc()
- {
- var tcs = new TaskCompletionSource<int>();
- _service.RandomNumberProduced += RandomNumberProduced;
- _service.RequestRandomNumber();
- return tcs.Task;
- void RandomNumberProduced(object sender, RandomNumberProducedEventArgs e)
- {
- _service.RandomNumberProduced -= RandomNumberProduced;
- tcs.SetResult(e.Number);
- }
- }
- }
- // You can define other methods, fields, classes and namespaces here
- public class RandomNumberService
- {
- private Random _rnd = new Random();
- public event EventHandler<RandomNumberProducedEventArgs>? RandomNumberProduced;
- public void RequestRandomNumber()
- {
- Task.Run(() =>
- {
- Thread.Sleep(5000);
- RandomNumberProduced?.Invoke(this, new RandomNumberProducedEventArgs { Number = _rnd.Next() });
- });
- }
- }
- public class RandomNumberProducedEventArgs : EventArgs
- {
- public int Number { get; set; }
- }
Advertisement
Add Comment
Please, Sign In to add comment