2012-11-25 2 views
1

결과를 텍스트 파일로 작성해야하는 메서드가 있습니다. 나는 텍스트 파일 asynch를 작성하기 위해 C# 5에서 Async/Await을 사용하지만 프로그램이 동기화를 실행한다고 생각합니다. 성능에 어떤 영향을 미칩니 까? WriteLineAsync()의 올바른 형식은 무엇입니까?WriteAsync() 및 WriteLineAsync() C#

public static void Do() 
{ 
    for(int i=1;i<1000;i++) 
    { 
     //Here I want to do something 
     Write1(); 
     Write2(); 
    } 
} 


private static async void Write1() 
{ 
    using (StreamWriter str = new StreamWriter(Environment.CurrentDirectory + @"\R.txt")) 
    { 
     await str.WriteLineAsync(string.Format("{0}",Public.FullTime.Elapsed)); 
    } 
} 

private static async void write2() 
{ 
    using (StreamWriter PStr = new StreamWriter(Environment.CurrentDirectory + @"\p.txt")) 
    { 
     await PStr.WriteAsync(StrBuilder.ToString()); 
    } 
} 

답변

1

쓰기가 동기식이 아니지만 완료 될 때까지 기다리는 중입니다. 따라서 실제로 비동기가 발생하지 않습니다.

전화가 끝날 때까지 기다리지 않으려면 Task을 새로 만들고 시작할 수 있습니다. 그러면 다른 스레드에서 쓰기가 수행됩니다.

+7

** 당신이 _ 대기 중이지만 당신은 _blocking_이 아니기 때문에 ** 잠재적으로 무언가를 얻습니다. 이러한 메소드가 동시에 호출되는 경우에는 큰 차이가 있습니다. UI 스레드에서이 작업을 수행하면 스트림의 버퍼를 채울 때 UI가 멈추는 것을 막을 수 있습니다 . –

+0

Task.Wait()을 사용해야하는 것으로 나타났습니다. 그렇지 않으면 일부 데이터가 누락 될 수 있습니다. 차이점이 없으므로 스트림 작성자가 자신의 일을 할 때까지 기다려야한다고 생각하기 때문에 해결책을주십시오. async/await의 사용법은 무엇입니까? – mohammad

+0

프로세스가 종료되어 데이터가 누락 되었습니까? –