Что не так с этой реализацией Awaiter в Unity3D? - PullRequest
1 голос
/ 04 апреля 2019

Итак, я пытался создать простую ожидаемую структуру, которая позволяла бы мне возвращать bool:

// define a special container for returning results
public struct BoolResult {
    public bool Value;
    public BoolAwaiter GetAwaiter () {
        return new BoolAwaiter(Value);
    }
}

// make the interface task-like
public readonly struct BoolAwaiter : INotifyCompletion {
    private readonly bool _Input;

    // wrap the async operation
    public BoolAwaiter (bool value) {
        _Input = value;
    }

    // is task already done (yes)
    public bool IsCompleted {
        get { return true; }
    }

    // wait until task is done (never called)
    public void OnCompleted (Action continuation) => continuation?.Invoke();

    // return the result
    public bool GetResult () {
        return _Input;
    }
}

И я использовал это как:

private async BoolResult LoadAssets (string label) {
    //
    // some await asyncFunction here
    //

    // then at the end
    return new BoolResult { Value = true };
}

Но я все еще получаюэта ошибка компиляции:

error CS1983: The return type of an async method must be void, Task or Task<T>

Я думал, что мой BoolResult уже был похож на задачу?В чем здесь проблема?

...