Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Jan 17 14:08
    IgorFedchenko commented #4126
  • Jan 17 14:07
    IgorFedchenko synchronize #4126
  • Jan 17 01:36
    dependabot-preview[bot] synchronize #3985
  • Jan 17 01:36

    dependabot-preview[bot] on nuget

    Bump FsCheck.Xunit from 2.9.0 t… (compare)

  • Jan 17 01:36
    dependabot-preview[bot] edited #3985
  • Jan 17 01:36
    dependabot-preview[bot] synchronize #4066
  • Jan 17 01:36

    dependabot-preview[bot] on nuget

    Bump FSharp.Quotations.Evaluato… (compare)

  • Jan 17 01:36
    dependabot-preview[bot] synchronize #3986
  • Jan 17 01:36

    dependabot-preview[bot] on nuget

    Bump NUnit from 3.6.1 to 3.12.0… (compare)

  • Jan 17 01:36
    dependabot-preview[bot] edited #4066
  • Jan 17 01:36
    dependabot-preview[bot] edited #3986
  • Jan 17 01:35
    dependabot-preview[bot] edited #3986
  • Jan 17 01:35
    dependabot-preview[bot] edited #3985
  • Jan 17 01:35
    dependabot-preview[bot] edited #4066
  • Jan 17 01:34

    dependabot-preview[bot] on nuget

    (compare)

  • Jan 17 01:34

    dependabot-preview[bot] on dev

    Bump System.Configuration.Confi… (compare)

  • Jan 17 01:34
    dependabot-preview[bot] closed #4131
  • Jan 17 00:01
    dependabot-preview[bot] synchronize #4131
  • Jan 17 00:01
    dependabot-preview[bot] synchronize #4066
  • Jan 17 00:01

    dependabot-preview[bot] on nuget

    Bump System.Configuration.Confi… (compare)

Daniel Ferreira Monteiro Alves
@danfma
I created a service with a queue of messages
the actors should pop some messages from time to time
Joshua Benjamin
@annymsMthd
Maybe a pooled router with a resizer?
Daniel Ferreira Monteiro Alves
@danfma
I was thinking in use the router to create that behaviour, while checking from time to time that queue
yes!
that's the point!
I created some actors using the async behaviour
Andrew Skotzko
@skotzko
i guess you could have one actor scheduled to receive messages off the queue and then hand them to a resizable pool router for scalable processing
s/them/the messages
Daniel Ferreira Monteiro Alves
@danfma
that's what the monitor is doing the previous code
the Executors is a pool of actors routed by the monitor
Andrew Skotzko
@skotzko
ah
ok
Daniel Ferreira Monteiro Alves
@danfma
one thing is funny
if I use the async from the .NET then the actors does not respect the default behaviour that only one message is processed by an actor at a time, apparenly
apparently*
is the the right thing when using async or a problem
Roger Johansson
@rogeralsing
What version are you using?
Daniel Ferreira Monteiro Alves
@danfma
the last one
just checking
Andrew Skotzko
@skotzko
default respects one message at at time
Roger Johansson
@rogeralsing
And what async behavior? Suspend or reentrant?
Natan Vivo
@nvivo
this async stuff must be a problem with Brazilians...
Andrew Skotzko
@skotzko
you have to specifically enable reentrant
Daniel Ferreira Monteiro Alves
@danfma
the version on nuget is the 1.0.0
yes, I configured that
kkkkkkkkkkkkk
is there another one here?
Natan Vivo
@nvivo
you should leave the default or specify Suspend
are you using ReceiveActor?
Daniel Ferreira Monteiro Alves
@danfma
yes
I will write one example here, just a moment
Natan Vivo
@nvivo
just do Receive<Foo>(async foo => { .. })
the default behavior is Suspend already
Roger Johansson
@rogeralsing
Btw async await is broken in nuget 1.0 package
Natan Vivo
@nvivo
oh, right!
Andrew Skotzko
@skotzko
but fix coming next week
in 1.0.1
Daniel Ferreira Monteiro Alves
@danfma
ahhhh
Natan Vivo
@nvivo
@danfma I'm Brazilian
Daniel Ferreira Monteiro Alves
@danfma
:D
me too
and good to say that was not a problem with me this time
:D
public class JobExecutor : ReceiveActor
    {
        private readonly Application _application;
        private bool _working = false;

        public JobExecutor(Application application)
        {
            _application = application;

            Receive<BeginWork>(AsyncBehavior.Reentrant, _ => _application.ExecuteInScope(() => OnBeginWork()));
        }

        private async Task OnBeginWork()
        {
            if (_working)
            {
                Console.WriteLine("Executando trabalho ainda {0}", Thread.CurrentThread.ManagedThreadId);
                return;
            }

            _working = true;

            Console.WriteLine("Iniciando trabalho {0}", Thread.CurrentThread.ManagedThreadId);
            //Thread.Sleep(8000);
            await Task.Delay(10000);
            Console.WriteLine("Finalizando trabalho {0}", Thread.CurrentThread.ManagedThreadId);

            _working = false;
        }
    }
Natan Vivo
@nvivo
Reentrant means exactly that messages will be processed during task awaits
you want the non-reentrant behavior
Andrew Skotzko
@skotzko
yeah you want the suspend behavior
Daniel Ferreira Monteiro Alves
@danfma
if I use the suspend the message will be processed only one time
Natan Vivo
@nvivo
Yes, and that's the default, you don't need to provide an argument