2017-12-11 1 views
0

내 웹 API에서 return 문 다음에있는 폴더를 삭제하고 싶습니다. 내가 기대했던 return after code

public string Post(HttpRequestMessage request) 
{ 
    //Do cool stuff with request 
    try 
    { 
     return "10.0.2.2:8080/myFolder/index.html"; 
    } 
    finally 
    { 
     Thread.Sleep(60000); 
     Directory.Delete(myFolder, true); 
    } 
} 

POST를 만드는 장치가 return 문을 얻고 html 파일을로드 할 수 있다는 것입니다. 잠시 후이 파일을 삭제하여 서버의 여유 공간을 확보합니다.

실제로 return 문은 finally 문 다음에 전송됩니다.

반환을 늦추지 않고 지연된 return 문 다음에 코드를 실행하려면 어떻게해야합니까?

+0

사항을 삭제하면 파일을 확인할 수 있습니다 내 의견에 반환 후 코드를 실행할 수없는 것은에서, 프로세스 작동 할 수 없습니다 응답을 얻은 후에 메서드 호출하기 –

+0

내부에'thread.sleep'과 함께 비동기 작업을 생성 할 수 없습니까? 아니면 웹 API에 'DELETE' 호출을하기 위해 장치가 필요하다고 말하고 있습니까? – BeGreen

+1

반환하면 방법은 끝났습니다. 'Task.Delay (60000)'로 작업을 시작할 수 있습니다. – FCin

답변

3

그렇게 할 방법이 없으며 리소스 (예 : 웹 서버 스레드)를 대기 상태로 유지할 것이므로 어쨌든 나쁠 것입니다.

디렉토리를 주기적으로 확인하고 특정 연령의 모든 파일을 삭제하는 다른 프로세스 (Windows의 경우 Windows 서비스가 바람직 함)를 작성하십시오.

+0

실제 실행 방법입니다. 그러나 사람들은 문서를 읽지 않으며,이 작업에 대해 잊어 버리면 새 서버를 설치하게됩니다. – BeGreen

+2

@BeGreen 그러면 더 명확하게 (힌트) 또는 액세스하기가 쉽습니다 (설정). 그것이 존재하지만 사람들이 그것을 모르고 (또는 잊어 버리기 때문에) 그것을 사용하지 않는다면 그것은 유용성 문제입니다. –

+0

글쎄, "방법이 없다"내 생각에 실제로 사실이 아닙니다. 예를 들어 호스팅 환경에서 백그라운드 작업을 대기열에 넣을 수 있습니다. 하지만 고급 지식 (예 : 예외 처리 등)이 필요하므로 추가 답변으로 추가하지 않습니다. 불쾌감은 없습니다. (모두들 어떻게 든 시작됩니다.)하지만'try..finally' 방법에 대한 조언이 필요한 사람은 아마도 리팩토링에 충실해야한다고 생각합니다. 어쨌든 [this posting] (https://stackoverflow.com/questions/14710822/how-to-queue-background-tasks-in-asp-net-web-api)은 더 읽을 거리가 될 수 있습니다. – Peit

0

당신이 1m 이전에 생성 된 파일은 당신이하려고하는 것이

DirectoryInfo objDirectoryInfo = new 
       DirectoryInfo(Server.MapPath("~/files")); 
foreach (FileInfo File in objDirectoryInfo.GetFiles) { 
    if ((File.LastAccessTime < DateTime.Now.AddMinutes(-1))) { 
     File.Delete(); 
    } 
}