Короткий ответ: Вы можете сделать это, если вы не на Диспетчерский нити, что-то вроде:
System.Threading.ThreadPool.QueueUserWorkItem(state =>
{
IAsyncResult asyncResult = svc.BeginSomething(null, null);
if (!asyncResult.CompletedSynchronously)
{
asyncResult.AsyncWaitHandle.WaitOne();
}
try
{
svc.EndSomething(asyncResult);
}
catch
{
throw;
}
finally
{
asyncResult.AsyncWaitHandle.Close();
}
});
Большим преимуществом является то, что вы можете сохранить слой модели домена синхронно, как в старые времена , вы можете реализовать отложенную загрузку легко и т.д ...
Но на практике вы можете использовать его только при разработке приложения строго придерживаться MVVM/командных узоров, где вы r ViewModels and Commands обрабатывают переключение между потоком диспетчера и потоками модели. Это много работы на земле, и есть некоторые проблемы, но когда это работает, это работает чудесно.
Если вы хотите использовать готовый к использованию фреймворк, который работает аналогично, он доступен здесь: CodeProject: Introducing the Model Thread View Thread Pattern. Архитектура также очень хорошо объясняется на этой странице.