2013-10-15 1 views
0

Я пытаюсь создать оболочку sdk, которая сделает все соответствующие HTTP-вызовы, которые необходимо выполнить, но из-за сложности из-за того, что разработчик использует его так Я пытаюсь создать функцию, которая возвращает обычный объект, но внутри этой функции я хочу, чтобы вызов и асинхронный вызов, и ждать на httpclient или webclient, но я не могу понять, как это сделать?создать асинхронную функцию, используя async wait и вернуть обычный объект

Все, что я вижу, это иметь функцию пустоты, которая не подходит или имеет задачу или задачу, но это тоже не хорошо.

Я хотел бы пользователю определить функцию, как обычно, т.е.

MyClss myobject = company.sdk.RequestData("http://...."); 

не возможно ли это? Я считаю, что если вы используете .Result, он превращает вызов в синхронный вызов, который не подходит.

Любые предложения или решения? Может быть, я смотрю на это неправильно?

+4

Если вы переносите текущую базу кода на это, сделайте то, что сделали все остальные (включая Microsoft). Создайте отдельные методы 'XXXAsync', которые выполняются асинхронно. Ответ на ваш вопрос: «Нет». Вы не можете заставить их определять свой класс как нормальный и надеяться, что он будет действовать как комбинация 'async' /' await'. –

ответ

3

Я хотел бы пользователю определить функцию, как обычно, т.е. MyClss MyObject = company.sdk.RequestData ("HTTP: // ....");

Определение «нормальное» меняется. В Новом Свете нормальный для асинхронных методов, которые должны быть вызваны асинхронно (то есть через await).

Вы только что сказали, что хотите, чтобы пользователь мог синхронно вызывать ваш асинхронный метод. Это ненормально.

Как отметил Саймон, правильным решением является предоставление асинхронного API для асинхронных методов. Просто следуйте TAP; всем разработчикам .NET необходимо будет изучить его рано или поздно.

+0

Спасибо за ссылку «Tap». Очень четко объяснено и имеет смысл. – Thierry

Смежные вопросы