1

SqlDependency (たとえば) は、前のイベント ハンドラーの呼び出しが完了していないときに OnChange イベントを発生させますか? (OnDependencyChange メソッドは非常に時間がかかると仮定します) 正確には何が起こるのでしょうか?

SqlDependency dependency=new SqlDependency(command);


// Subscribe to the SqlDependency event.
dependency.OnChange += new
OnChangeEventHandler(OnDependencyChange);
4

2 に答える 2

2

私はSqlDependencyクラスにそれほど精通していませんが、MSDNのドキュメントによると:

OnChangeイベントは、コマンドの実行を開始したスレッドとは異なるスレッドで生成される場合があります。

これにより、2つのイベントハンドラーが同時に実行される可能性が開かれるようです。イベントの発生から呼び出されたすべてのイベントハンドラーは、イベントを再度発生させる前に完了する必要があることを示すドキュメントはありません。安全な方法は、イベントの複数の同時呼び出しが発生する可能性があると想定することです。イベントは未定義のスレッドで発生するため、とにかく並行性の問題を防ぐ必要があります。

于 2010-08-31T18:24:23.527 に答える
0

通常のシングルスレッドプログラムではそうではありません。以下を試してください:

Windows フォーム アプリを追加します。フォームにボタンを追加します。ボタンのクリック イベントを処理するには、次のメソッドを使用します。

private void Buttonclick(object sender, EventArgs e)
{
    Thread.Sleep(25);//SUSPEND CURRENT THREAD
}

への呼び出しが作業を終了するまで、ボタンをクリックすることはできませんThread.Sleep(25)(スレッドを 25 秒間中断します)。これは、コンソール アプリでもテストできます。

于 2010-08-31T17:57:56.143 に答える