dataメソッド内のストアドプロシージャ呼び出しを非同期呼び出しに変えようとしています。これは元の方法です。
public void InsertFoo(Foo foo)
{
this.Database.SomeStoredProcedure(foo);
}
私の最初の試みはこれでした:
public void InsertFoo(Foo foo)
{
Task.Factory.StartNew(() =>
{
this.Database.SomeStoredProcedure(foo);
});
}
ただし、this.Databaseがnullであるというランタイムエラーが発生します。(this.DatabaseはL2Sデータコンテキストです。)
それから私はいくつかの調査を行い、自分のローカルコピーを作成することでそれができると考えました。
public void InsertFoo(Foo foo)
{
MyDataContext db = this.Database;
Task.Factory.StartNew(() =>
{
db.SomeStoredProcedure(foo);
});
}
ただし、dbはスレッドによって実際に使用される前に破棄されるため、別のランタイムエラーが発生します。
this.Databaseをスレッド化されたメソッドに渡したいだけです。それは可能ですか?もしそうなら、どのように?this.Databaseは、クラスインスタンスがなくなったため、メソッドが戻るときに破棄されるため、これを解決する方法がわかりません。