Выбор между WF CodeActivity и AsyncCodeActivity для операций с БД - PullRequest
4 голосов
/ 14 сентября 2011

Я все еще довольно новичок в WF, так что терпите меня, если я не правильно сформулирую это в первый раз.;)

Если вы делаете выборку для хорошо нормализованной базы данных, используя первичные ключи, возвращая отдельные записи, в среде с довольно низким объемом (несколько сотен запросов в день), действительно ли это имеет значениеиспользуете ли вы CodeActivity против AsyncCodeActivity?

Несмотря на то, что у меня есть некоторые дополнительные исследования по хостингу и выполнению, возможно, но не вероятно, что несколько запросов будут получены в или околов то же время.Я не уверен, изменит ли это ответ или нет.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 23 сентября 2011

В общем, я настоятельно рекомендую разработчикам операций, которые делают любые операции ввода-вывода, использовать AsyncCodeActivity и вызывать базовые API-интерфейсы Async, когда это возможно.Даже если запрос короткий, это всегда предпочтительнее.

5 голосов
/ 15 сентября 2011

Microsoft использовала non async в своей операции ExecuteSqlQuery: http://wf.codeplex.com/releases/view/43585

Асинхронные действия: «Это полезно для пользовательских действий, которые должны выполнять асинхронную работу без удержания потока планировщика рабочего процесса и блокировки любых действий, которые могут выполняться параллельно».

"В результате асинхронной работы AsyncCodeActivity может вызвать точку простоя во время выполнения. Из-за неустойчивой природы асинхронной работы AsyncCodeActivity всегда создает блок no persist на время выполнения действия. Это предотвращает рабочий процесс среда выполнения сохраняет экземпляр рабочего процесса в середине асинхронной работы, а также предотвращает выгрузку экземпляра рабочего процесса во время выполнения асинхронного кода. "

Источник: http://msdn.microsoft.com/en-us/library/ee358731.aspx

Редактировать: я заметил, что указал только на недостатки использования асинхронного ответа. Я рассмотрю ответы Рона и Тима, чтобы принять лучшее решение

1 голос
/ 20 сентября 2011

Очевидно, что ничего не изменится, если вы на самом деле не вызовете Async API в своей реализации деятельности.

Тем не менее, даже если это что-то меняет, оно может не иметь заметного различия во многих приложениях. Потенциальные причины:

  • Запрос выполняется слишком быстро.
  • Вы не выполняете несколько запросов параллельно. (Выполнение многих асинхронных операций параллельно выполняется быстрее, чем синхронно и, следовательно, последовательно.)
  • Вы не запускаете большое количество параллельных рабочих процессов, которые могут потребоваться для конфликта потоков.
...