1
가정 해 샘플 조각 :IO 작업에서 async/await의 기능은 무엇입니까?
public async void writeDataOnFile (byte[] data, string filePath) {
using(var fs = new FileStream(filePath)) {
await File.WriteAsync(data,0,data.length);
}
}
나는 어떤 배경 스레드가 스레드 풀에서 소비되지 않는 것을 알고 있지만 IO 작업이 시작됩니다 및 스레드가 마지막에 통보됩니다.
질문 : 어떻게하면 WriteAsync가 CPU 바인딩 방식이 아닌 IO 바인딩 방식인지를 async/await에서 이해할 수 있습니까?
도움을 주시면 감사하겠습니다.
컴파일러는 전혀 이해할 필요가 없습니다. 'File.WriteAsync'에 의해 반환 된 작업이 완료 될 때 연속을 예약합니다. * 그것이 어떻게 완료되는지는'File.WriteAsync'의 구현에 달려 있습니다. –
태스크가 I/O 또는 CPU 바인딩인지 여부를 신경 쓰지 않는 방법에 대한보다 실질적인 예는 https://msdn.microsoft.com/de-de/library/hh873178(v)를 살펴보면 도움이 될 것입니다. = vs.110) .aspx # EAP 이벤트 기반 작업 (다운로드가 시작되고 완료되면 알림)이 작업으로 변환 될 수있는 간단한 예제를 보여주는 위치. 비슷한 점이 WriteAsync에 의해 수행됩니다.이 경우 내부적으로 OS는 작업이 완료되면 콜백마다 알립니다. – ckuri
또한 "아무 배경 스레드도 스레드 풀에서 소비되지 않습니다." 나는 특히 스레드 풀에 대해 신경 쓰지 않았기 때문에이 문장이 정확한지 확신 할 수는 없지만 99 % 정도의 백그라운드 스레드가 사용되었다고 확신한다. 기술적으로 정확한지 여부에 관계없이 해당 진술에서 잘못된 정보를 추측 할 수있는 것처럼 느껴집니다. 아니 그 특히에 대해 걱정하는 '기다리는'... – zzxyz