문제

웹 사이트 (데이터 액세스에 LINQ-to-SQL을 사용하는 ASP.NET 3.5)에 다음과 같이 작동 해야하는 프로세스가 있습니다.

  1. 파일 업로드
  2. 파일에 관한 정보를 데이터베이스에 기록하고 저장합니다
  3. 파일에서 데이터베이스로 데이터를 가져옵니다
  4. 다른 페이지로 리디렉션하십시오

이렇게 순차적으로 실행되면 모든 것이 잘 작동합니다. 그러나 가져 오는 파일이 상당히 클 수 있으므로 3 단계가 UI 스레드와 다른 스레드에서 실행 되려고합니다. 사용자는 4 단계로 가야하고 3 단계는 여전히 진행 중이며 4 단계의 화면은 주기적으로 업데이트되어 가져 오기가 완료된시기를 사용자에게 알립니다.

다음과 같이 스레딩을 처리하고 있습니다.

public class Import {

  public static void ImportPendingFile() {
    Import i = new Import();
    Thread newThread = new Thread(new ThreadStart(i.ImportFile));
    newThread.Start();
  }

  public void ImportFile() {
    // 1. Query DB to identify pending file
    // 2. Open up and parse pending file
    // 3. Import all data from file into DB
    // 4. Update db to reflect that import completed successfully
  }
}

그리고 Codebehind에서 :

protected void butUpload(object sender, EventArgs e) {
  // Save file, prepare for import
  Import.ImportPendingFile();
  Response.Redirect(NewLocation);
}

이 작업을 수행 할 때 디버거를 통해 새 스레드가 제대로 시작되고 있음을 확인할 수 있습니다. 그러나이 작업을 수행 할 때마다 파일에 액세스하려고 할 때 스레드가 중단됩니다 (뒤의 코드의 2 단계). 이것은 기본 스레드에서 실행될 때 잘 작동하므로 멀티 스레드 상황에 대한 무언가가이를 막는 것입니다. 파일이 디스크에 저장되었으므로 (그렇습니다) 다른 스레드에서 열기에는 아무런 문제가 없어야한다고 생각했습니다. 내가 잘못한 곳과 어떻게 고칠 수 있습니까? 감사!

참고 : 타사 어셈블리를 사용하여 파일을 열고 있습니다. 반사판을 사용하여 파일을 열어주는 방법과 관련된 다음 코드를 찾았습니다.

if (File.Exists(fileName)) {
  using (FileStream stream = new FileStream(fileName, FileMode.Open)) {
    // use stream to open file
  }
}
도움이 되었습니까?

해결책

response.redirect (url, false), 그렇지 않으면 '응답'은 그 호출 직후에 종료됩니다.

다른 팁

ASP.NET View State는 오늘날의 웹 개발을위한 훌륭한 기능이자 필수 도구입니다. 앞뒤로 이동할 때 페이지의 상태를 유지합니다. 포스트 백 사이의 페이지 제어 값을 복원하는 것에 대해 더 이상 걱정할 필요가 없습니다. 이 기사에서는보기 상태에 대한 심층적 인 관점을 얻게됩니다. 우리는 불필요한 페이로드를 줄이고 눈을 사로 잡는 상태에서보기 상태를 보호하는 방법에 대해 이야기 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top