2013-09-03 1 views
0

Я реализую сетевую библиотеку, и я делаю ее асинхронной (с beginxxx-endxxx, а не async/await). Я также хочу, чтобы оставить некоторые синхронные методы, которые я планирую на реализации какРазве это хорошая идея для реализации синхронных методов с BeginXXX и EndXXX?

xxx() 
{ 
    var r=BeginXXX(); 
    EndXXX(r); 
} 

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

Это хорошая идея с Begin/End, или это может вызвать проблемы с работой приложения stream/kill?

+0

Я думаю, что вы сбиваете с толку тупики с бесконечными петлями, насколько я знаю, вы можете определить тайм-ауты с асинхронным и ждать. Поэтому вам нужно будет только реализовать методы «Начать» и «Закончить». – Silvermind

ответ

1

Этот способ выполнения синхронных операций будет менее результативным, в частности, по распределению памяти. Сразу же блокирование на IAsyncResult также (обычно) требует от вас выделить AsyncWaitHandle, поэтому вы также выделяете дополнительный объект ядра для каждого запроса.

В конце концов, это зависит от того, насколько вы результативны необходимо ваших синхронных приложений. Если это общепринятая, широко используемая библиотека (например, System.Net.Sockets.Socket), то вам определенно не следует использовать этот подход. Если это просто базовая библиотека, и вам не нужно поддерживать экстремальные сценарии, то вы, вероятно, можете уйти с такими обертками.