タスクの2つのメソッドを作成する必要があります。それぞれ、ContinueWith()と似ていますが、メインUIスレッドでcontunuationを実行します。パラメータAction
とアクション<Task>の実装
過法、Action<Task>
方法(アクションにオーバーロードするための)タスクを返します。返されたタスクは、メインタスクと継続 が完了した後で終了する必要があります。
Action
と正しく実装されていますか?そして、どのようにReturned task must finish only after main Task and continuation
でAction<Task> input
を有する第二ケースを実装する私は
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
WorkAsync WA = new WorkAsync();
Action firstaction = new Action(WA.Count);
WA.Work(firstaction, uiScheduler);
Action<Task> secondaction = new Action<Task>(); //What should be here?
WA.Work(secondaction, uiScheduler);
}
public class WorkAsync
{
public Task Work(Action input, TaskScheduler uiSchedule)
{
return Task.Factory.StartNew(input).ContinueWith((e) => { Console.WriteLine("Done"); }, uiSchedule);
}
public Task Work(Action<Task> input, TaskScheduler uiSchedule)
{
/// What should be here?
}
public void Count()
{
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine(i);
}
}
}
}
}
基本的な「await」のように見えます。十分なはずです...なぜこのような複雑な共同de? –
2番目のメソッドでは、 'public Task Work(Action input、TaskScheduler uiSchedule)'の署名が間違っていると思います。 'public Task Work(Task current、Action input、TaskScheduler uiSchedule)' 。そうでなければ、不可能な再帰的な仕事をしているように見えます。 –
Enigmativity
@AlexeiLevenkov、それはアクションで実装するタスクです。 –
A191919