1

ユーザーのリストに電子メールを送信する ASP.NET ページがあります。このリストはかなり大きくなる可能性があり、ASP.NET ページがタイムアウトになることがよくあります。

私たちがやりたいことは、これらの電子メールを新しいスレッドで送信することです。これにより、電子メール プロセスがバックグラウンドで動作している間に ASP.NET ページがユーザーに対して更新されます。

私は自分が何をする必要があるのか​​ を理解するのに少し苦労しています. 現在、ASP.NET ページのボタン クリック イベントは次のとおりです。

    protected void btnSend_Click(object sender, EventArgs e)
    {    
        //Populate form data session
        _FormInfo = new Dictionary<string, string>();
        _FormInfo.Add("Name", txtName.Text);
        _FormInfo.Add("Postcode", txtPostcodeDone.Text);

        PostcodeSearcher.PostcodeEmailer(_Companies, _FormInfo);
        mv.ActiveViewIndex = 3;
    }

そして、これが私が呼び出したいメソッドです(PostcodeSearcherクラス内)

 public static void PostcodeEmailer(List<Company> companies, Dictionary<string, string> quote)
        {
            ...
        }

ご覧のとおり、新しいスレッドで呼び出す必要があるメソッドはパラメーターを受け入れる必要があります。オンラインで見つけることができるのは、パラメーターなしで新しいスレッドを呼び出すことだけです。何か案は?

4

2 に答える 2

1

IIS が ASP.NET アプリケーション プロセスを強制終了する問題に注意してください。IIS は、アプリに対するアクティブなユーザー リクエストがない場合にそれを実行できます (既定では 20 分の遅延の後)。これは、バックグラウンド スレッドが電子メールの送信作業を完了する前に強制終了される可能性があり、ユーザーがそれを認識できないことを意味します。

この問題を解決するには、ユーザー リクエストをシミュレートして、ランタイムがアプリを強制終了しないようにします。他のオプション (より良いがより多くの作業) は、ASP.NET アプリから (WCF サービスなどを使用して) コマンドを取得し、ユーザーに電子メールを送信する別のプロセス (Windows の「バックグラウンド」サービスなど) を作成することです。Windows サービスを簡単に作成するには、http ://topshelf-project.com/ などを参照してください。

この問題の詳細については、バックグラウンド スレッドでオプションでコードを実行する方法を参照してください。

于 2012-10-25T15:51:00.167 に答える
0

ここにあるC#のタスク機能を使用します。これらは非同期コマンドを実行するのに非常に便利です(そして実装は非常に簡単です)。

編集:

Task postcodeTask = new Task(() => PostcodeSearcher.PostcodeEmailer(_Companies, _FormInfo));
postcodeTask.Start();
于 2012-10-25T15:33:37.643 に答える