public Task<>
メソッドを持つDLLがあり、return Task.Factory.StartNew(() => ...)
を返します。私はプログラムの中でそれを呼び出すのですが、他のことを続ける前にタスクの実行が終了するのを待ってもらいたいです。 DLLにThread.Sleep(6000)
を追加して、より長い実行をシミュレートしました。C#DLL非同期メソッドの終了を待つ
私は(予想通り)それはちょうど、実行を継続し、この
var invokedTask = myMethod.Invoke(Activator.CreateInstance(myClass), myParams);
のようにそれを呼んでいます。しかし、私はこれを試しました:
var invokedTask = Task.Factory.StartNew(() => myMethod.Invoke(Activator.CreateInstance(myClass), myParams));
invokedTask.Wait();
それは動作しません。どうすればDLLの外部から待つことができますか?
私は、呼び出し元のメソッドが定義で非同期キーワードを持っている必要があります考えて
2番目の例では、* new * 'Task'を作成しています。あなたがそのタスクを与えている唯一の仕事は、 'myMethod'関数を実行し、それが返すタスクを無視することです。もちろん、「タスク」は完了するまでに時間がかかりません。あなたの最初の例で '' InvokedTask''を '' Wait''と呼んでみませんか? –
すでに試しましたが、 'invokedTask'は' Task'型ではなく 'object'です – Norgul
しかし、実際には' Task'です。あなたが必要とするのは、キャストだけです。より多くの「タスク」を作成することに悩まされるわけではありません。 –