Основанный на обратном вызове асинхронный метод с несколькими параметрами для awaitabletask

У меня есть следующий код для подключения к SDK MYOB

    var cfsCloud = new CompanyFileService(_configurationCloud, null, _oAuthKeyService);
    cfsCloud.GetRange(OnComplete, OnError);

где

private  void OnComplete(HttpStatusCode statusCode, CompanyFile[] companyFiles)
    {  // ask for credentials etc }

Я хочу преобразовать это, чтобы использовать TaskCompletionSource, как в этом примере

однако мой OnComplete имеет несколько параметров. Как мне это кодировать?

1 ответ

Решение

Как уже упоминалось в комментарии

SDK для Accountright API поддерживает async/await, т.е. GetRangeAsync

так что вы можете сделать что-то вроде этого, если вы хотите / нужно обернуть это в TaskCompletionSource

static Task<CompanyFile[]> DoWork()
{
    var tcs = new TaskCompletionSource<CompanyFile[]>();
    Task.Run(async () =>
    {
        var cfsCloud = new CompanyFileService(_configurationCloud, null, _oAuthKeyService);
        var files = await cfsCloud.GetRangeAsync();
        tcs.SetResult(files);
    });
    return tcs.Task;
}
Другие вопросы по тегам