[c#] Task.Run을 비동기 메소드에 두어야합니까?



0 Answers

비동기 로 메소드를 꾸밀 때 기억해야 할 가장 중요한 점 중 하나 는 적어도 메소드 내에 연산자가 하나씩 있다는 것입니다. 귀하의 예에서는 TaskCompletionSource 사용하여 아래와 같이 변환합니다.

private Task<int> DoWorkAsync()
{
    //create a task completion source
    //the type of the result value must be the same
    //as the type in the returning Task
    TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();
    Task.Run(() =>
    {
        int result = 1 + 2;
        //set the result to TaskCompletionSource
        tcs.SetResult(result);
    });
    //return the Task
    return tcs.Task;
}

private async void DoWork()
{
    int result = await DoWorkAsync();
}
Question

나는 비동기가 가장 간단한 형태로 기다리고 있음을 이해하려고 노력하고있다. 이 예제를 위해 두 개의 숫자를 추가하는 매우 간단한 메서드를 만들고 싶습니다. 처리 시간이 전혀 들지 않았습니다. 예제를 공식화하는 것입니다.

예제 1

private async Task DoWork1Async()
{
    int result = 1 + 2;
}

예제 2

private async Task DoWork2Async()
{
    Task.Run( () =>
    {
        int result = 1 + 2;
    });
}

DoWork1Async() 를 기다리는 경우 코드가 동 기적으로 또는 비동기 적으로 실행됩니까?

UI 스레드를 차단하지 않도록 메서드를 기다릴 수 있고 비동기로 만들기 위해 Task.Run 에 동기화 코드를 래핑해야합니까?

내 메소드가 Task 인지 또는 Task<T> 반환 Task.Run 하고 있습니다. Task.Run 으로 코드를 래핑하여 비동기로 만들어야 Task.Run ?

어리석은 질문이지만, Task.Run 또는 StartNew 래핑되지 않은 비동기가없는 코드를 사람들이 기다리고있는 예제를 볼 수 있습니다.




Related