Search
Write a publication
Pull to refresh
0
0
Send message
Объект ожидания должен реализовать интерфейс INotifyCompletion, который обязывает реализовать метод void OnCompleted(Action continuation). Также он должен иметь экземплярные свойство bool IsCompleted, метод void GetResult(). Может быть как структурой, так и классом.

Метод GetResult () не обязательно должен возвращать void. Это может быть любой другой тип. Для примера мы можем возвращать квадрат числа над которым выполняем await:
    class Program
    {
        static async Task Main(string[] args)
        {
            var pow = await 3;
            Console.WriteLine(pow);
        }       
    }

    public static class WeirdExtensions
    {
        public static AnyTypeAwaiter GetAwaiter(this int number) 
             => new AnyTypeAwaiter(number);

        public class AnyTypeAwaiter : INotifyCompletion
        {
            private readonly int _number;
            public bool IsCompleted => false;

            public AnyTypeAwaiter(int number)
            {
                _number = number;
            }
     
            public void OnCompleted(Action continuation)
            {
                continuation();
            }

            public int GetResult()
            {
                return _number * _number;
            }
        }
    }

Information

Rating
Does not participate
Registered
Activity