Görev için iki yöntem oluşturmam gerekiyor, her biri ContinueWith() ile benzer olacak, ancak ana UI iş parçacığında contunuation gerçekleştirecek. parametrelerle Action
ileEylem <Task> uygulama
Aşırı yük yöntemi, Action<Task>
Yöntemi (Eylem ile aşırı için) Görev döndürür. İade edilen görev, ana Görev ve devam tamamlandıktan sonra bitmelidir.
Action
ile doğru uygulama işlevi var mı? Ve nasıl Returned task must finish only after main Task and continuation
ile Action<Task> input
ile ikinci durumda uygulamaya Ben
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);
}
}
}
}
}
Basit 'bekliyor' yeterli gibi görünüyor ... Yeterince neden böyle karmaşık bir coca ihtiyacınız var de? –
İkinci yönteme ait imzanızın yanlış olduğunu düşünüyorum - 'public Task Work (Eylem input, TaskScheduler uiSchedule)' - bana göre, “public Task Work (Görev Akışı, Action input, TaskScheduler uiSchedule)” olmalıdır. . Aksi halde, bir çeşit imkansız yinelemeli görev yaptığınız anlaşılıyor. –
Enigmativity
@AlexeiLevenkov, Action ile uygulanması görevidir. –
A191919