15

戻りを待たずに、SQL Server への呼び出しをパントしたいだけです。Entity Framework 6.0.0-rc1 でこの方法で非同期に呼び出したいストアド プロシージャからエンティティ関数をインポートしました。これは可能ですか?構文は何ですか?

Entity Function: RecalculateBudgetNumbers(int id)
4

2 に答える 2

5

ああ。私は Entity Framework の土地に長くいました。ヒントをありがとう。これが私のために働いたものです。これに問題はありますか?

    /// <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);
        }
    }

そして私のテスト (私は Visual Studio 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());
    }

Matt Smith と Usr からの提案の後、私はこれに変更RecalculateBudgetNumbersAsyncしました。これが彼らの意味であることを願っています:

    public void RecalculateBudgetNumbersAsync(int budgetId)
    {
        System.Threading.Tasks.Task.Factory.StartNew(() => RecalculateBudgetNumbers(budgetId));
    }
于 2013-10-08T14:58:41.327 に答える