생산이 예상 한 것처럼
class Program
{
static void Main(string[] args)
{
var task = new Task(Run);
task.Start();
task.Wait();
Console.WriteLine("Main finished");
Console.ReadLine();
}
public async static void Run()
{
var task = Task.Factory.StartNew(() =>
{
Console.WriteLine("Starting");
Thread.Sleep(1000);
Console.WriteLine("End");
});
await task;
Console.WriteLine("Run finished");
}
}
출력
Main finished
Starting
End
Run finished
는 그 다음에 실행 비동기식 인 void
메서드를 사용하면 완료 추적을 할 수있는 방법이 없습니다. 귀하의 new Task(Run)
은 Run 메서드를 시작하기위한 작업 만 생성합니다. Run이 처음 도착한 후에 메소드의 진행 상황을 추적 할 수있는 방법은 없습니다. 메소드 진행 상황과 관련이 없기 때문입니다. 이 문제를 해결하려면 void
대신 Task
을 반환해야하며 새 작업을 만드는 대신 기다려야합니다.
async void
과 async Task
의 차이는 here으로 설명됩니다.
이 링크가 도움이되기를 바랍니다 http://stackoverflow.com/a/9519578/2798643 –
[async intro blog post] (http://blog.stephencleary.com/2012/02/async- and-await.html)을 참조하십시오. 코드 [task 생성자를 사용해서는 안됩니다.] (http://blog.stephencleary.com/2014/05/a-tour-of-task-part-1-constructors.html) [또는 Task.Factory. StartNew'] (http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html) (두 블로그 링크). –