は、wcfサービス、syncおよびasyncで定義された2つのオペレーションコントラクトがあると仮定します。私は、WCFサービスも内部のスレッドプールを持っているので、各I/O操作が別のスレッドに終了することができる理解したよう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();
}
}
:2個のサンプルがあります。 Task.Factory.StartNewを使用して新しいスレッドを開始するだけです。
データベースのアクセスがEntityFrameworkによって行われ、ブロックされていても、パフォーマンスの観点からは、同期と非同期のサーバー呼び出しに違いはありますか?
FYI Stephen Toubには、今月のMSDNマガジンのTask-based Asynchrony Patternを使用した非同期のパフォーマンスの影響に関する記事があります。ここで読むことができます:http://msdn.microsoft.com/en-us/magazine/hh456402.aspx –