2016-06-28 9 views
0

静的クラスで構成されているdllを作成しました。私は、私のWebジョブ(webjob1、webjob2など)でAzureで作成してデプロイしました。Azure WebJobsで静的メソッドを呼び出す

各Webジョブは同時にメソッドにアクセスできます。静的クラスを使用しているため、ヒープ内に単一のメモリーが作成されます。すべてのWebジョブには、その静的クラスの参照値が含まれています。私の質問は、それは何か問題を作りますか?

私の理解によると、C#は同期的に動作します。したがって、各Webジョブは静的クラスの機能にアクセスするためにキュー内で待機します。したがって、その静的クラスの変数に対して行われた変更は、他のwebジョブに反映されます。静的クラスはスタンドアロンメモリを持ちます。

私の前提が正しければ、そのような静的ヘルパークラスを、インスタンス化して使用できる通常のヘルパークラスではなく、なぜ保持しなければならないのですか?

私は、このinorderのような静的なクラスを作成して、私のdbからいくつかの詳細を取得しています。

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に同じ依存関係のある複数のwebジョブがあります。そのWebサイトの複数のインスタンスがあり、SDKトリガーを使用しますが、キュートリガーは使用しません。

各ウェブジョブは独自のプロセスとして実行され、ウェブサイトの各インスタンスにはそれらのウェブジョブの他のインスタンスが存在する場合があります(単一インスタンスまたは複数インスタンスを設定したかどうかによって異なります)。

「それぞれのウェブジョブは同時にメソッドにアクセスできます」 - はい、しかしそれらは異なるプロセスにあるため、その場合は安全です。

これがあなたの質問に答えるなら、.netと複数のプロセスがどのようにして静的ロジック(実際にはwebjobs固有ではない)を処理するかをもっと詳しく知ることができます。ジェフリー・リヒターの詳細を学ぶことから始めます。

+0

私はあなたの答えからもう少し明確化が必要です...あなたはwebjobsがプロセスとして働いていることに言及しているので、各webjobsは独自のメモリを作成し、独自の静的クラスインスタンスを持っています(静的クラスメモリはプロセスメモリ(Webjobメモリ)の下に割り当てられます)。 – Skull

+0

Kuduコードを見ると、webjobがまったく新しいcmd.exeプロセスを取得したように見えます。 webjobディレクトリは、ProcessStartInfoに設定され、ラップされてから開始されます。サイトとWebジョブの間に共有メモリがないと私は思っています。 ProcessWrapper.csは基本となるプロセスをラップし、このクラスで開始します。プロセスはExecutable.csクラスのメソッドで作成されますCreateProcess()https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/Executable.cs –

+0

ありがとうございます...あなたは正しいです各Webジョブは異なるプロセスで実行されているため、スレッドセーフになります。 – Skull

関連する問題