Это то, как вы используете задачу, учитывая ваш код. Однако обратите внимание, что этот код не может быть скомпилирован так, как вы его опубликовали, поскольку ExcelConverter
не определено.
Тем не менее, он должен выглядеть так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;
namespace PrestaConverter
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("skriv in filvägen till Kategorifil");
string path = Console.ReadLine();
while (File.Exists(path) == false)
{
Console.WriteLine("fel filväg skriv in en ny");
path = Console.ReadLine();
}
Task worker = Task.Run(() => ThreadWorker(path));
// Wait for task to complete.
Console.WriteLine("Waiting for background task to complete.");
worker.Wait();
Console.WriteLine("Background task has completed");
Console.ReadLine();
}
static void ThreadWorker(string path)
{
ExcelConverter convert = new ExcelConverter();
convert.Convert(path);
}
}
}
Если задача возвращает результат, вы просто создаете его как Task<T>.Run(() => ...))
, где T
- тип результата. Затем вместо ожидания завершения задачи, используя .Wait()
, вы можете получить доступ к Task.Result
для получения результата - это заставит его ждать завершения задачи, прежде чем получить доступ к результату.
Вот пример изменено выше, так что ThreadWorker()
возвращает строку:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;
namespace PrestaConverter
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("skriv in filvägen till Kategorifil");
string path = Console.ReadLine();
while (File.Exists(path) == false)
{
Console.WriteLine("fel filväg skriv in en ny");
path = Console.ReadLine();
}
Task<string> worker = Task.Run(() => ThreadWorker(path));
// Wait for task to complete.
Console.WriteLine("Waiting for background task to complete.");
string result = worker.Result;
Console.WriteLine("Background task returned: " + result);
Console.WriteLine("Background task has completed");
Console.ReadLine();
}
static string ThreadWorker(string path)
{
ExcelConverter convert = new ExcelConverter();
convert.Convert(path);
return "This is the result";
}
}
}