Если вы еще не уверены в фоновой задаче, просто попробуйте получить доступ к элементу GUI из Задачи, например:
public async Task<int> ProcessStuff_Async()
{
while(true)
{
label1.Text = "processing next item";
, чтобы получить исключение времени выполнения:
Операция с несколькими потоками недопустима: управление 'label1' осуществляется из потока, отличного от потока, в котором он был создан.
, как в старых добрых обычных фоновых потоках.
Есть информация в Документах MSDN (по состоянию на 2017 год :-), например:
Лучший способ справиться с этим ... - запустить фоновый поток, который выполняет работу, используя Task.Run , и ждут своего результата.Это позволит пользовательскому интерфейсу чувствовать себя плавно во время работы.
В этом документе даже есть раздел What happens under the covers
.