Thread
-
[.NET] 비동기(async, await) 방식의 메소드를 동기 방식으로 안전하게 호출하기.NET/개념 및 유용한 팁 2023. 1. 4. 23:02
가장 좋은 것은 대세에 따라 비동기 방식으로 개발하는게 좋지만, 현 회사에서 ASP.NET Core를 동기방식으로 개발해놔버린지라 좋은 도구를 개같이 쓰거나, 옛날 라이브러리의 방식을 뒤져서 쓰거나 하는 어려움이 따르고 있다. 왠만하면 참겠으나, HttpClient 놔두고 WebRequest 써야 되는 상황이 나오니 머리에 꼭지 돌 지경이다. 하여 동기방식으로 안전하게 호출하는 방식을 찾아보았다. .NET 7.0 이하 버전 기준, 비동기 함수를 .Result 프로퍼티를 통해 직접적으로 결과를 받게끔 개발하게 되면 랜덤한 상황에 Thread 교착상태가 발생하여 갑자기 동작이 멈추는 이슈가 발생할 수 있다. // 이와 같은 호출은 큰 위험이 따른다. var res = _factory.CreateClient(..
-
[Async/Await] Invoke보다 간편하게 UI 접근하기.NET/개념 및 유용한 팁 2019. 12. 19. 23:46
비동기 프로그래밍(async, await)에 대한 올바른 사용법에 대한 문서가 있습니다. https://ddochea.tistory.com/212 를 참조해주세요. 2015년도에 작성했던 포스트 "2015/01/11 - [C#] - [Invoke & BeginInvoke] 1. 다른 Thread 에서 UI 접근하기 (1)" 가 현재까지도 부동의 1순위를 기록하고 있다. 일간 방문자수의 절반이상이 해당 포스트 관련 접근이다. 멱살잡고 캐리중 그런데 좀 찝찝하다. 2012년쯤? 부터 .NET 4.5 및 C# 5.0가 발표되면서 async, await가 소개되었었고, 2015년에 Invoke & BeginInvoke 다루는 나도 참 늦게배운다 생각했는데, 2020년이 오는 중에도 Invoke와 BeginInv..
-
[Invoke & BeginInvoke] 1. 다른 Thread 에서 UI 접근하기 (2).NET/개념 및 유용한 팁 2015. 1. 12. 18:04
async / await를 이용한 보다 간편한 UI 접근방법을 포스트로 작성하였습니다. 해당 포스트와 함께 https://ddochea.tistory.com/40를 함께 참고해주시기 바랍니다. 지난 시간엔 Invoke를 사용하여 오래걸리는 작업에 대한 결과를 UI 멈춤 없이 표현하는 방법을 포스트했다. 이런 기능을 통해 데이터베이스에 연결, 조회, 수정과 같은 작업이나, 네트워크 통신에 대한 연결, 송신 및 수신 작업에 대해 다른 스레드로 두고, 그 상태나 결과에 대해 UI에 표현하여, 사용자의 요청에 지체없이 응답할 수 있는 프로그램을 개발하는데 응용할 수 있다. :-) 그러나 때론 UI 자체에서 큰 작업을 진행되는 경우가 있다. 가령 대용량으로 조회된 데이터를 하나의 표(Table) 컨트롤에 표현한다..
-
[Invoke & BeginInvoke] 1. 다른 Thread 에서 UI 접근하기 (1).NET/개념 및 유용한 팁 2015. 1. 11. 11:00
async / await를 이용한 보다 간편한 UI 접근방법을 포스트로 작성하였습니다. 해당 포스트와 함께 https://ddochea.tistory.com/40를 함께 참고해주시기 바랍니다. 오랜 시간이 걸리는 작업에 대해선 Thread를 생성하여 처리하는 것은 어느 프로그램이나 마찬가지일 것이다. C# 기반 프로그램도 예외는 아니다. 만일 Thread 없이 만들면 어떻게 될까? Thread를 선언하지 않은 상태에서 아래와 같은 프로그램을 만들어보았다. 해당 프로그램은 입력한 수 x 만큼 2를 더하는 프로그램. 즉, x*2를 덧셈만으로 계산하는 프로그램이다. [그림 1] 입력한 수 x 만큼 2를 더하는 프로그램 다음 프로그램의 소스는 아래와 같다. using System; using System; us..