позволяет предположить, что у нас есть два рабочих контракта, определенных для службы wcf: синхронизация и асинхронность.Существует два примера:
public void SubscribeSingle(int userId)
{
var clientId = this.OperationContext.GetClientId();
var session = this.OperationContext.GetPollingDuplexSession();
if (string.IsNullOrEmpty(clientId) || session == null || userId == 0)
{
return;
}
this.InternalSubscribeSingle(userId, clientId, session.SessionId);
}
и
public IAsyncResult BeginUnsubscribeSingle(int userId, AsyncCallback callback, object state)
{
var clientId = this.OperationContext.GetClientId();
var session = this.OperationContext.GetPollingDuplexSession();
if (string.IsNullOrEmpty(clientId) || session == null)
{
return null;
}
var asyncResult = new VoidAsyncResult(callback, state);
Task.Factory.StartNew(() =>
{
try
{
this.InternalUnsubscribeSingle(userId, clientId);
asyncResult.SetAsCompleted(false);
}
catch (Exception ex)
{
asyncResult.SetAsCompleted(ex, false);
}
});
return asyncResult;
}
public void EndUnsubscribeSingle(IAsyncResult result)
{
var response = result as VoidAsyncResult;
if (response != null)
{
response.EndInvoke();
}
}
Как я понимаю, служба WCF также имеет пул потоков внутри, поэтому каждая операция ввода-вывода может быть завершена в другом потоке.Помимо запуска нового потока с помощью Task.Factory.StartNew
Есть ли какая-либо разница между вызовами синхронизирующего и асинхронного серверов с точки зрения производительности, если доступ к базе данных осуществляется через EntityFramework и хотя и блокируется?