Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

In one of my server application I have a class that look like, class A { static

ID: 643496 • Letter: I

Question

In one of my server application I have a class that look like,

class A
{
   static int _value = 0;
   void DoSomething()
   {
         // a request start here
          _value = 0;
         _value++;
         // a request end here
   }
   // This method can be called many time during request
   void SomeAsyncMethods()
   {
         _value++;
   }
}
The problem is SomeAsyncMethods is async. Can be called many times. What I need when a request start set _value = 0 and then asynchrosnously increment this. After end of request I need the total. But the problem is that another request at the same time can access the class.

Explanation / Answer

use

System.Threading.Interlocked.Increment( ref _value );
instead of

_value++;
Interlocked.Increment

If multiple requests share this class and each one should get its own counter you need a non static counter that you pass to all threads working on this request.

Like this

class A
{
void DoSomething()
{
// a request start here
RequestData data = new RequestData();
request.IncrementValue();
// a request end here
}

// This method can be called many time during request
void SomeAsyncMethods( RequestData request )
{
request.IncrementValue();
}
}

class RequestData
{
int _value = 0;

public void IncrementValue()
{
System.Threading.Interlocked.Increment( ref _value );
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote