Миграция однопотоковых вызовов DownloadString WebClient () на асинхронные вызовы - PullRequest
1 голос
/ 24 марта 2011

Я хочу преобразовать очень статический DownloadString() вызов в DownloadStringAsync(), но не могу получить поток, как мне хотелось бы.

В настоящее время я делаю следующее в лотах мест:

string apiurl = "http://api.gowalla.com/spots/" + spot;
var entries = JsonConvert.DeserializeObject<SpotInfo>(CallGowalla(apiurl));
return entries;

С CallGowalla выглядит так:

private static string CallGowalla(string apiurl)
        {
            var wc = new WebClient();
            wc.Headers["Accept"] = "application/json";
            wc.Headers["ContentType"] = "application/json";
            wc.Headers["Authorization"] = CreateAuthorizationString();
            wc.Headers["-Gowalla-API-Key"] = ConfigurationManager.AppSettings["api"].ToString();
            var raw = wc.DownloadString(apiurl);
            return raw;
        }

Я получаю зависание от вызовов, поэтому я хочу переместить DownloadString на DownloadStringAsync, и я не уверен, с чего начать, не разорвав все вызовы на CallGowalla во всем.

Есть идеи?

Предложения по архитектуре и рефакторингу приветствуются также ...

1 Ответ

1 голос
/ 24 марта 2011

Возможно, вы хотите подумать о том, как вы вызываете метод CallGowalla (). Вероятно, проще начать вызывать этот метод асинхронно. Взгляните на некоторые примеры этой статьи Microsoft KB. Ваш метод CallGowalla () эквивалентен LongRunningMethod () в этих примерах.

Асинхронный запуск методов, возможно, с использованием дополнительных потоков, может быть проблематичным в некоторых средах, таких как ASP.NET. Важно исследовать вопросы, зависящие от вашей среды. Если вы пытаетесь получить более высокую пропускную способность (больше обращений к Gowalla), то вы можете захотеть использовать ThreadPool для выполнения вашего метода без управления потоками. Проблема в том, что вы можете очень быстро выйти за пределы Gowalla API. Было бы хорошо, если бы вы могли предоставить более подробную информацию о том, почему вам нужно выполнять эти вызовы асинхронно.

Если вам нужен хороший обзор потоков с C #, есть бесплатная книга .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...