Попробуйте это
using System.Threading.Tasks;
public bool MyMainFunction()
{
bool result = UpdateTable1();
Task.Run(() => UpdateTable2());
return result;
}
Task.Run (Действие)
От: https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx
ставит в очередь указанную работу для запуска в пуле потоков и возвращает объект Task, представляющий эту работу.
По сути, Task.Run помещает ваш элемент в пул потоков - что позволяет ему работать асинхронно. Обычно вы связываете это с методами задачи Wait или Result , чтобы заблокировать вызывающий поток до завершения задачи, например:
using System.Threading.Tasks;
public bool MyMainFunction()
{
Task<bool> task = Task.Run(() => UpdateTable1());
Task.Run(() => UpdateTable2());
return task.Result;
}
В предыдущем примере - оба метода теперь поставлены в очередь в пуле потоков - это означает, что они могут выполняться параллельно. (В первом примере - UpdateTable1 должен был завершиться до начала UpdateTable2 - но мы запустили и забыли об UpdateTable2 - так что это было несущественно). Новый пример теперь позволяет UpdateTable2 начать выполнение до завершения UpdateTable1. Однако теперь у нас возникнет проблема, поскольку нам нужно дождаться, пока результат UpdateTable1 вернет требуемое значение bool.
Когда вы вызываете, task.Wait () или task.Result , ваш метод в основном приостанавливается до завершения задачи - в этом случае он ждет, пока table1 не обновится .
Теперь - вы заметите, что у нас нет переменной для хранения состояния задач UpdateTable2 - это потому, что вам плевать на результат. Поскольку не хранится ни одна переменная, мы никогда не блокируем вызывающий поток для просмотра результата - это означает, что вы фактически получили метод «Fire and Forget».
Надеюсь, это поможет немного прояснить ситуацию - но если нет, есть множество ресурсов, чтобы помочь, посмотрите на Асинхронное и Параллельное программирование, так как найдутся люди, которые могут объяснить более ясно, чем я.
Мне было полезно следующее:
MCSD сертификация-инструментарий-экзамен-70-483
Я также преобразовал имена ваших методов из Case Camel в Pascal Case, поскольку это стандартная практика.