3

C# ASP.NET 3.5

非同期または一方向ではない Web サービスのメソッドを「起動して忘れる」ことは可能ですか?

私が必要としない値を返すメソッドがあります (いくつかの処理の後)。これは別のグループ (サービスを書いた人) によって使用されます。基本的に、ユーザー x がアクション y を行ったことを通知するだけです。メソッドを呼び出して、結果を待たずに先に進むだけです。

RunWorkerAsync で BackgroundWorker() を使用しようとしましたが、何らかの理由でメソッドが起動しません。コードにアクセスできないため、Web サービス メソッドを変更できません。BackgroundWorker、Invoke、ThreadPool などを使用する必要がありますか? 結果が返される必要はなく、失敗したかどうかを知る必要もありません。基本的に、メソッドを呼び出し、それが機能する場合は素晴らしいです。そうでない場合は、処理を停止したり遅くしたりしたくありません。

public static void Test()
{
    var worker = new BackgroundWorker();
    worker.DoWork += Test2;
    worker.RunWorkerAsync(new object[] {12345, "test"});
}

private static void Test2(object sender, DoWorkEventArgs e)
{
   // Write to log that we got into the method - does not
   object[] args = e.Argument as object[];
   int num = Convert.ToInt32(args[0]);
   string name = (string)args[1];
   // call web service method here....
}
4

3 に答える 3

1

バックグラウンドワーカーを使用する代わりに、次のことを試すことができます

    public static void Test()
    {
        System.Threading.ThreadPool.QueueUserWorkItem(delegate
        {
            Test2(new object[] { 12345, "test" });
        });
    }

    private static void Test2(object data)
    {
        // Write to log that we got into the method - does not
        object[] args = data as object[];
        int num = Convert.ToInt32(args[0]);
        string name = (string)args[1];
        // call web service method here....
    }
于 2013-04-18T02:56:20.680 に答える