अहह। मैं एंटीटी फ्रेमवर्क भूमि में बहुत लंबा था। सुझावों के लिए धन्यवाद। यहां मेरे लिए क्या काम किया है। क्या आप इसके साथ कोई समस्या देखते हैं?
/// <summary>
/// kicks off the LONG RUNNING calculations on a budget to regenerate all pre-cooked numbers.
/// </summary>
/// <param name="budgetId">Budget Id</param>
public async System.Threading.Tasks.Task RecalculateBudgetNumbersAsync(int budgetId)
{
await System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
}
public static void RecalculateBudgetNumbers(int budgetId)
{
//this is static so we don't use the unit of work..
using (BMTContext ctx = new BMTContext())
{
ctx.UpdateLifeOfBudgetNumbers(budgetId);
ctx.UpdateIntervalNumbers(budgetId);
ctx.UpdateIntervalActivityNumbers(budgetId);
ctx.UpdateLifeOfBudgetActivityNumbers(budgetId);
}
}
और मेरा परीक्षण (मैं विजुअल स्टूडियो 2012 में हूं इसलिए मैं एसिंक परीक्षण कर सकता हूं)।
[TestMethod]
public async System.Threading.Tasks.Task RecalculateBudgetNumbersAsyncTest()
{
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
await repo.RecalculateBudgetNumbersAsync(budgetId);
System.Console.WriteLine("RecalculateBudgetNumbersAsyncTest milliseconds: " + timer.ElapsedMilliseconds.ToString());
}
मैट स्मिथ और उसर के सुझावों के बाद, मैंने RecalculateBudgetNumbersAsync
को बदल दिया। मुझे आशा है कि उनका यही अर्थ है:
public void RecalculateBudgetNumbersAsync(int budgetId)
{
System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
}
एंटीटी-फ्रेमवर्क पर अटक न जाए! आप उन तरीकों का उपयोग एसिंक कर सकते हैं जैसे आप सब कुछ async का उपयोग कर सकते हैं। (टास्क.रुन, थ्रेड, एसिंक (4.5 से)) – Marguth