我們有一個下游系統,一個ERP系統,可以通過SOAP公開其表格。它發佈的Web服務通常具有創建,更新和刪除方法。然後,我們使用svcutil生成代理,包括異步方法。最後,我們在此之前放置一個ACL,以便其他系統與之交互。更好地拋出NotSupportedException任務內部或外部?
我們也剛剛發現一個重要的不變量 - 項目的成本計算信息不能由除ERP系統本身以外的任何其他項目更新。然而,真正愚蠢的API將允許消費者這樣做。
我想解決這個問題是繼承WCF代理,並有更新的顯式實現拋出NotSupportedException
。不,這不會阻止開發人員創建自己的代理並執行此操作。但至少我們可以保證在通過ACL時不會發生這種情況。
Update_Result Item_Port.Update(Update request)
{
throw new NotSupportedException();
}
對於異步方法,我可以做任何
Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
throw new NotSupportedException();
}
OR
Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
return Task.Factory.StartNew<Update_Result>(() =>
{
throw new NotSupportedException();
});
}
從一個異步的角度看,哪一個更 '正確的嗎?'
順便說一句,不是使用具有拋出lambda的'StartNew()',而是使用'TaskCompletionSource'和'SetException()'。 – svick 2013-04-23 00:21:15
這個問題是關於.NET 4.0沒有任何異步擴展,它會更好地刪除/避免使用C#-5.0術語'異步'在制定問題,因爲它混淆 – 2013-04-23 02:38:19
我一直忘記.net 4.5是c# 5.0。 – 2013-04-23 16:18:26