티스토리 뷰

 

 

Pixabay로부터 입수된 Innova Labs님의 이미지 입니다.

 

 

 

문의를하다

 

 

MS MVP분께 현재까지 Task와 Thread, BackgroundWorker의 사용방법에 대해 문의를 했습니다.

 

친절하게도 잘 정리되어있는 링크를 보내 주셨습니다.

 

 

Task와 Thread에 관한 정리

https://www.c-sharpcorner.com/article/task-and-thread-in-c-sharp/

 

Task And Thread In C#

The Thread class is used for creating and executing threads in C#. A Task represents some asynchronous operation and is part of the Task Parallel Library, a set of APIs for running tasks asynchronously and in parallel. Difference between Task And Thread

www.c-sharpcorner.com

> 여기서는 Task가 어떤식으로 처리되는지에 관한 내용이 정리되어있었습니다.

 

이걸 보고 시간이 오래걸리는 작업에 관해서는 Task를 사용하면 결과 예측이 되기 어렵다는게 조금 더 명확해졌습니다.

 

언제 시작할 것이며 Sleep을 사용하여 어느정도 쉬고 다시 작업할 것인가로

작업하기 위해서는 Thread 쓰는게 유리하지만 프로세스의 전반적인 처리가 느려질 수 있는점을 확인 했습니다.

 

물론 Task와 Thread가 많아지면 다른 프로세스에 영향을 주는 것은 같은 것일 거라 생각 됩니다.

 

 

 

 

Thread와 BackgroundWorker에 관한 정리

 

https://www.codeproject.com/Articles/628237/Thread-vs-BackgroundWorker

 

Thread vs. BackgroundWorker

Why do we have two different things to accomplish the same end result?

www.codeproject.com

 

 

이 부분은 조금 더 명확해 진 것 같습니다.

 

예전에 BackgroundWorker에 관해 정리하면서 너무 섣불리 사용했던 것 같다고 회상한 바 있습니다.

 

안드로이드에서 Http 통신을 할 때 Main UI Thread에 영향을 주지 않기 위해 백그라운드 작업을 위해

BackgroundWorker와 비슷한 클래스를 사용 했던 기억으로 C# 비주얼 프로그래밍 할 때 그대로 

사용한게 잘못 되었다고 생각했었습니다.

 

위 정리된 글에서 확인한 바로는 UI 처리할 경우 BackgroundWorker를 쓰는게 좋고

사용자가 해당 클래스들을 이해하는 정도에 따라 필요한 경우 사용하면 좋다라고 하였습니다.

 

그래서, 제가 이때까지 BackgroundWorker를 사용한 모든 프로젝트에서는

Thread가 조금더 적절 했을 것이라 생각됩니다.

 

경우에 따라 비동기 처리해야 하는 경우가 있습니다. 그럴 땐 Task를 써야하고

 

Thread.Sleep과 같이 해당 메소드가 ThreadPool에서 Thread를 오래 붙잡을 만한 작업이 있다면

 

Thread를 사용하는게 좋다고 다시한번 정리되어집니다.

 

 

- 정리 -

 

1. 백그라운드 작업 또는 별도로 작업할 경우

대부분의 경우 Thread를 사용하는게 좋다.

 

2. UI 변경이 잦다면 BackgroundWorker를 사용하게 좋을 수 있다.

> 하지만 현재 WPF의 MVVM 패턴을 사용할 경우

UI의 value에 Binding 하다보니 WPF에서는 사용할 일이 적을 것으로 보인다.

> ThreadPool에서 Thread를 할당 받는 것이라 작업 시간이 오래걸리면 다른 Task들에게도 영향을 준다.

 

3. Task는 비동기 작업 시 사용하기 좋은 클래스이다.

> 높은 추상화능력이란 다른 말로 CLR에서 잘 제어해준다는 말이 아닐까...합니다. ( 이건 그냥 느낌적인 느낌입니다.)

 

 

 

- 덧붙여 -

 

MVP 분들이 자료 정리한 것들을 잘 활용하는게 좋습니다!

그리고 C#에 관해서는 CodeProject와 C# Cornor의 자료가 이해하는 데 도움이 되었습니다.

'C#' 카테고리의 다른 글

폴더관리 프로그램  (0) 2022.10.20
메모리 스트림 사용에 관해  (0) 2021.10.19
Task 관련 테스트  (0) 2021.07.20
C# - BackgroundWorker에 관하여  (0) 2021.06.28
C#의 역사  (0) 2021.06.20
댓글