2016-05-12 12 views
0
System.Threading.Tasks.Task myTask = System.Threading.Tasks.Task.Factory.StartNew(() => TestMethodRefresh()); 
myTask.ContinueWith(() => TestMethodPrint(null), System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext); 

private void TestMethodPrint(System.Threading.Tasks.Task task) { 
      testDiv.InnerHtml = "from continue with"; 

} 

.NET Framework 4.0 vb.netでうまく動作するコードを使用しようとしていますが、使用できませんasp.netの.netフレームワーク4.5。私はそれが0引数を取っていないことを意味しているか分からない。私はlambaで追加の引数を提供しようとしましたが、それだけで引数のそれらの追加の数もかかりません。代理人 'System.Action <System.Threading.Tasks.Task>'は0引数を受け取りません

答えて

1

.ContinueWithを呼び出して0の引数を受け入れる代理人を与えるため、コンパイラはエラーを通知します.ContinueWithはAction<Task>ではなくActionと予測します。

Task myTask = Task.Factory.StartNew(() => TestMethodRefresh()); 
myTask.ContinueWith((t) => TestMethodPrint(null), new CancellationToken()); 

を他の過負荷は次のようになります:次のようにコードを変更し、あなたの問題を解決するためにあなたがContinueWithに受信されている

Task myTask = Task.Factory.StartNew(() => { }); 
myTask.ContinueWith((s, o) => TestMethodPrint(null), new object(), TaskScheduler.FromCurrentSynchronizationContext()); 

パラメータ(T)は、前のタスクです。詳細については、MSDNを参照してください。

+0

私はcancellationtokenの代わりにtaskschedulerを渡していましたが、同じエラーが発生しました。 – codemonkeyliketab

+0

このようにすることはできません。私は、アクションとCancellationTokenを受け取るオーバーロードを使用しました。 TaskSchedulerを渡す場合は、このオーバーロードをチェックし、必要なすべてのパラメータを指定します。 https://msdn.microsoft.com/en-us/library/hh194761%28v=vs.110%29.aspx – 3615

+0

他のオーバーロードを使用するために投稿を更新しました。そのため、コードは単純にコンパイルされます。しかし、あなたは本当に署名を理解する必要があり、あなたが渡しているパラメータは何かを理解する必要があります。 – 3615

関連する問題