Delay(0)
은 항상 인라인됩니까? 내 경험상 다음과 같습니다.Task.Yield()와 Task.Delay (0)
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
static async Task Test()
{
await Task.Yield();
Console.WriteLine("after Yield(), thread: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(0);
Console.WriteLine("after Delay(0), thread: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(100);
Console.WriteLine("after Delay(100), thread: {0}", Thread.CurrentThread.ManagedThreadId);
}
static void Main(string[] args)
{
Console.WriteLine("Main thread: {0}", Thread.CurrentThread.ManagedThreadId);
Test().Wait();
}
}
}
이것은 콘솔 응용 프로그램이므로 스레드 풀은 계속 사용됩니다. 출력 : Task.Delay
내부
Main thread: 11
after Yield(), thread: 7
after Delay(0), thread: 7
after Delay(100), thread: 6
감사합니다. 나에게 비 완성형 [작업 완료 상태의 작업]을 만드는 편리한 방법처럼 보입니다 (http://stackoverflow.com/a/18527377/1768303). 기술적으로 그는 데미안의 대답을 받아 들였습니다.] – Noseratio
@Noseratio 나는'Task completed = Task.FromResult (true); '와 같은 것을 사용하는 것이 더 효과적이라고 생각합니다. 나는'Task.Delay (0)'은 완료된'Task'를 반환 할 필요가 없다고 생각합니다. – svick
@svick, 나는'Task.FromResult (true)'가 더 적절하다고 동의하지만'millisecondsDelay' 만 변경하여 동기화와 비동기를 쉽게 시뮬레이션 할 수 있으므로'Task.Delay (millisecondsDelay : 0) '를 여전히 좋아한다. 그들이이 행동을 바꿀 수도 있다고 생각합니까? 그것은 위의 코드를 제공하면서 나를위한 급격한 변화처럼 보일 것입니다. – Noseratio