2016-06-28 2 views
0

정적 클래스로 구성된 dll을 만들었습니다. 저의 웹 작업 (webjob1, webjob2 등)에서 참조하고 하늘에서 생성 및 배포했습니다.Azure WebJobs로 정적 메서드를 호출하십시오.

각 웹 작업은 동시에 메소드에 액세스 할 수 있습니다. 정적 클래스를 사용할 때 힙에 단일 메모리가 작성됩니다. 모든 웹 작업에는 해당 정적 클래스의 참조 값이 포함됩니다. 내 질문은, 어떤 문제가 생길까요?

제 생각에 C#은 동기식으로 작동합니다. 따라서 각 웹 작업은 정적 클래스의 기능에 액세스하기 위해 대기열에서 대기합니다. 따라서 정적 클래스의 변수에 대한 모든 변경 사항은 다른 webjob에 반영됩니다. 정적 클래스는 독립형 메모리를 가지고 있기 때문에.

제 가정이 옳다면 우리가 인스턴스화하고 사용할 수있는 정적 헬퍼 클래스 대신에 정적 헬퍼 클래스를 유지해야하는 이유는 무엇입니까?

나는이 inorder와 같은 정적 클래스를 만들어 내 데이터베이스에서 세부 정보를 얻을 수 있습니다.

public static class StaticHelper 
    { 
     public static string GetValue() 
     { 
      using(IDBContext _DbContext = new sampleDBContext()) 
      { 

      } 

      //Acessing values through this context 
     } 
    } 
+0

정말 당신이 달성하려고에 따라 달라집니다. C#에는 async/await 패턴도 있습니다. 여기에 코드를 게시 할 수 있다면 더 쉬울 것입니다. 건배. – Thomas

+0

@Thomas가 업데이트되었습니다 ... – Skull

+0

Webjobs는 정적 방법에 액세스하는 것을 기다리지 않습니다. 그들은 동시에 그것을 부를 것이다. – Thomas

답변

2

정확하게 이해하면 dll에 대해 동일한 종속성을 가진 다중 webjob이 있습니다. 웹 사이트의 여러 인스턴스가 있고 SDK를 사용하지만 큐 트리거는 사용하지 마십시오.

각 웹 작업은 자체 프로세스로 실행되며 웹 사이트의 각 인스턴스에는 단일 인스턴스 또는 다중 인스턴스를 설정했는지 여부에 따라 해당 웹 작업의 다른 인스턴스가있을 수 있습니다.

"각 웹 작업은 동시에 방법에 액세스 할 수 있습니다."- 그렇지만 다른 프로세스에 있으므로 해당 경우 안전합니다.

귀하의 질문에 대한 답변을 얻으시면 .net과 여러 프로세스가 정적 논리 (실제 webjobs가 아닌)를 처리하는 방법에 대해 자세히 알아보십시오. Jeffry Richter와 함께 자세히 알아 보겠습니다.

+0

답변에서 좀 더 명확한 설명이 필요합니다 ...각 webjobs가 자신의 메모리를 만들고 자체 정적 클래스 인스턴스 (정적 클래스 메모리가 프로세스 메모리 (webjob 메모리) 아래 할당됨을 나타냄)로 작업하는 webjobs를 언급하기 때문에 안전한 것으로 처리 될 것입니다. 맞습니까? – Skull

+0

Kudu 코드를 보면 webjob이 아주 새로운 cmd.exe 프로세스를 얻는 것처럼 보입니다. webjob 디렉토리는 ProcessStartInfo로 설정되고 랩핑 된 다음 시작됩니다. 사이트와 webjobs 사이에 공유 메모리가 없다고 생각하게 만듭니다. ProcessWrapper.cs는 기본 Process를 래핑하고이 클래스에서 시작됩니다. https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/ProcessWrapper.cs. 이 프로세스는 Executable.cs 클래스 메소드에서 생성됩니다. CreateProcess() https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/Executable.cs –

+0

정말 고마워요 ... 당신 말이 맞아요. 각 webjobs는 다른 프로세스에서 실행되므로 스레드로부터 안전합니다. – Skull

관련 문제