我從另一個SO question找到了這個方法(函數?),我不確定如何使用它。我想用它來捕捉我的數據庫連接問題(通過無線網絡)並重試或拋出其他異常。我的應用程序只有一些數據庫訪問功能,所以我正要複製和粘貼所有內容,但如果需要更改某些內容,我不希望每次更新所有功能10次。如何使用此方法重用我的try/catch?
方法我想使用:功能
private void Retry<T>(Action<T> retryAction) where T : DataContext, new()
{
var retryCount = 0;
using (var ctx = new T())
{
for (; ;)
{
try
{
retryAction(ctx);
break;
}
catch (SqlException ex)
{
if (!Enum.IsDefined(typeof(RetryableSqlErrors), ex.Number))
throw;
retryCount++;
if (retryCount > MAX_RETRY) throw;
Thread.Sleep(ex.Number == (int)RetryableSqlErrors.Timeout ?
longWait : shortWait);
}
}
}
}
例子我想給它:
public async Task<List<EmployeeDisplay>> GetInspectorsAsync()
{
using (M1Context m1 = new M1Context())
{
var q = (from a in m1.Employees
where (a.lmeTerminationDate == null)
&& (a.lmeInspectorEmployee == -1)
orderby a.lmeEmployeeName
select new EmployeeDisplay
{
EmployeeID = a.lmeEmployeeID,
EmployeeName = a.lmeEmployeeName.ToUpper().Trim()
});
return await q.ToListAsync();
}
}
public async Task<List<Reason>> GetScrapReasonsAsync()
{
using (M1Context m1 = new M1Context())
{
Debug.WriteLine("getting scrap reasons");
var q = (from a in m1.Reasons
where a.xarReasonType.Trim().Equals("S")
select a);
return await q.ToListAsync();
}
}
爲什麼你寫的方法的10倍時,所有你需要做的是創建一個自定義類,您可以訪問它,或做一個靜態類,然後調用從該方法10個說不同的地方..我希望我正確理解你的問題.. – MethodMan
這是一個非常普通的重試方法來處理'SqlException'你還想要做什麼呢? – SimpleVar
你正確理解MethodMan,答案不是很好。只需要完成一些事情,並且由於缺乏經驗,我只知道一個快速而骯髒的方法來完成任務。幸運的是,我讓你們幫助我!至於我還想做什麼,目前我還不確定,但我討厭他們有重複方法的想法,當我可以爲它創建一個自定義類時。 – MEEECNC