에서 비동기 대의원 대 TPL 대 내가 생산에 잘 작동하는 응용 프로그램을 가지고,하지만 난 동시성 잘 구현 한 수 있는지 궁금해 C#스레드는 ASP.NET
기본적으로 n 개의 SQL 문을 즉시 생성 (약 50 개 생성) 한 다음 동시에 실행하고 .csv 파일에 데이터를 씁니다.
편집 : 먼저 페이지 요청을 반환 할 수 있도록 모든 작업을 수행 할 스레드를 만듭니다. 그 스레드에서 ...
각 SQL 문에 대해 TPL을 사용하여 새 작업을 만들고 datareader를 사용하여 실행하고 데이터를 디스크에 씁니다. 마지막 파일이 만들어지면 요약 파일에 요약 데이터를 작성하고 압축하여 사용자에게 제공합니다.
대신 스레드 또는 비동기 대리인을 사용해야합니까?
전반적인 접근법 (TPL)이이 상황에서 가장 좋은 방법인지 궁금한 점이있어서 코드를 게시하지 않았습니다.
제발 동적 인 SQL을 만드는 것에 대해 강의하지 마십시오. 데이터베이스에서 읽는 데이터베이스의 전문성과 질문과 관련이 없기 때문에 제게는 꼭 필요합니다. (독점 시스템의 백엔드로 7 천개 이상의 테이블이 있습니다.)
코드에서 변경을 수행하기 전에 비동기식/멀티 스레딩/멀티 태스킹의 차이점을 확인하십시오. 그것들은 동일하지 않으므로 두 시나리오를 모두 시나리오에 결합해야합니다. – MarcinJuraszek
ASP.NET에서'Task.Run' 또는'Task.Factory.StartNew'를하는 것은 정말 나쁜 생각입니다. HTTP 요청은 모든 작업이 완료 될 때까지 완료되지 않습니다. 이것으로 웹 애플리케이션의 확장 성을 정말로 상하게하는 것입니다. [async SqlDataReader API] 사용 (http://blogs.msdn.com/b/adonet/archive/2012/07/15/using-sqldatareader-s-new-async-methods-in-net-4-5-beta -part-2--examples.aspx)를 사용하십시오. – Noseratio
@MarcinJuraszek 나는 두 개념의 차이점을 이해한다고 생각한다. :) 당신은 더 자세히 설명 할 수 있습니까? 은혜?어쩌면 datareader에 비동기 메소드를 호출 할 수도 있습니다. 비동기 대리인 언급했을 때 어쩌면 내가 비동기 콜백, 각 SQL 쿼리에 대한 하나의/쓰기와 그것을 완료했을 때 그것을 완료해야한다고 생각하고 있었고, 그것을 끝내면 지퍼 않습니다 .... – user2416689