Запуск метода longProcess() в одном из моих C# api и при этом мы хотим дождаться завершения этой задачи. Но в то же время не нужно блокировать пользовательский интерфейс. Я видел много потоков SO, но ничего не помогает в моем случае. Ниже, метод 1 не блокирует пользовательский интерфейс и метод 2, блокирует/замораживает пользовательский интерфейс. Есть предположения?С точки зрения API, дождитесь выполнения задачи, но не блокируйте пользовательский интерфейс
public class MyApiManager
{
private string _x;
public MyApiManager(string x)
{
_x = x;
}
public void DoProcess()
{
// Method 1: Does NOT block UI, but does not wait either
Task task = Task.Factory.StartNew(() =>
{
Task longProcess = Task.Factory.StartNew(new Action(longProcess));
});
task.Wait();
// Method 2: BLOCKS UI, also waits
//var context = TaskScheduler.FromCurrentSynchronizationContext();
//Task task = Task.Factory.StartNew(() =>
//{
// var token = Task.Factory.CancellationToken;
// Task.Factory.StartNew(() =>
// {
// longProcess();
// }, token, TaskCreationOptions.None, context);
//});
//task.Wait();
}
private void longProcess()
{
// simulate long process
Thread.Sleep(10000);
}
}
Не могу понять проблему. Разве метод 1 не нужен? – Reniuz
Я не уверен, почему я был проголосован :(Это проблема, с которой я столкнулся, я могу дать больше информации. –
@Reniuz, как я уже сказал, нужны обе функции запуска async (метод 1) и в то же время (метод 2). –