我們正在考慮分開這些成果的承諾計算一些成果工作的API模式是:使用任務,以此來犯結果
interface IResults { }
class Results : IResults { }
Task<IResults> CalculateResultsAsync(CancellationToken ct)
{
return Task.Run<IResults>(() => new Results(), ct);
}
void CommitResults(IResults iresults)
{
Results results = (Results)iresults;
// Commit the results
}
這將允許客戶端有一個用戶界面,可以計算出某些結果,並知道計算何時準備就緒,然後在那個時候決定是否提交結果。這主要是爲了幫助我們處理在計算過程中,UI將允許用戶取消操作的情況。我們要確保:雖然動作還是撤銷
- 取消UI時,纔會顯示(即一旦我們在CommitResults,有沒有回頭路),所以一旦
CalculateResultsAsync
任務完成後,我們採取了取消用戶界面,只要用戶沒有取消,繼續並調用提交方法。 - 我們不希望有一個用戶點擊取消並且結果無論如何都被提交的情況(即競態條件)。
- 客戶永遠不會使用
IResults
而不是將其傳遞迴CommitResults
。
問: 一般的問題是:這是一個好的方法嗎?具體做法是:
- 這感覺不對具有這種分成兩種方法,因爲客戶端是永遠不會檢查
IResults
,他們只是遞迴Commit方法。 - 有沒有一個標準的方法來解決這個問題?
我們結束了其具有Commit方法的IResult去(如你所說):這種方式有沒有需要有兩個方法來表示一個動作。 – 2013-05-29 18:59:14