3

Task.Run成功せずに使用しようとする多くのコードを読みました。

私が達成したいこと:

  • ASP.NET WebForm イベント (クリック イベント ハンドラー) で、Fire & Forget メソッドを呼び出します (現在の実行フローをブロックしません)。

私が試したことと、なぜそれが機能しないのか理解できません:


最初のバージョン:

protected void btn_Click(object sender, EventArgs e)
{
    // Some actions
    // Should insert a record in database --> OK

    //Tried this call with and without ConfigureAwait(false)
    Task.Run(() => MyClass.doWork()).ConfigureAwait(false);

    // Should insert a record in database --> OK
    // Some actions not blocked by the previous call
}

public static class MyClass
{
    public static void doWork()
    {
        // Should insert a record in database --> NOT INSERTED
    }
}


2 番目のバージョン:

protected void btn_Click(object sender, EventArgs e)
{
    // Some actions
    // Should insert a record in database --> OK

    Bridge.call_doWork();

    // Should insert a record in database --> OK
    // Some actions not blocked by the previous call
}

public static class Bridge
{
    public static async Task call_doWork()
    {
        //Tried this call with and without ConfigureAwait(false)
        await Task.Run(() => MyClass.doWork()).ConfigureAwait(false);
    }
}

public static class MyClass
{
    public static void doWork()
    {
        // Should insert a record in database --> NOT INSERTED
    }
}

そこで、データベースにレコードを挿入する Fire & Forget メソッドを呼び出しますが、レコードが挿入されません。

Fire & Forget メソッドの呼び出しの前後に挿入が行われます。

問題を解決する方法がわかりません。

4

2 に答える 2

3

HttpContextメインスレッド以外のスレッドでは使用できないため、依存することはできません。

HttpContextただし、タスクを開始するときにメソッドにデータを渡すことができます。例えば:

Task.Run(() => MyClass.doWork(HttpContext.Current.Session["somedata"])).ConfigureAwait(false);
于 2016-05-03T15:16:03.740 に答える