Нет семафора в Silverlight? - PullRequest
2 голосов
/ 16 августа 2011

Я занимаюсь разработкой с Silverlight 4.

Темы есть. WaitHandles (AutoResetEvent, ManualResetEvent) тоже там. Но нет семафора? Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

На самом деле в Silverlight нет семафора. Библиотека Threading для SL ограничена. Но вы можете сделать свой собственный очень легко. Вот пример:

public class Semaphore
{
    private object Mutex { get; set; }
    private int Count { get; set; }
    private int Max { get; set; }

    public Semaphore(int max = 1)
    {
        Mutex = new object();
        Max = max;
    }

    public void WaitOne()
    {
        while (true)
        {
            lock (Mutex)
            {
                if (Count < Max)
                {
                    Count++;
                    return;
                }
            }

            Thread.Sleep(50);
        }
    }

    public void Release()
    {
        lock (Mutex)
        {
            if (Count >= 0)
            {
                Count--;
            }
        }
    }
}

Этот код основан на втором ответе этого поста , который предпочтительнее первого, так как фактически безопасен для потоков.

1 голос
/ 17 августа 2011

Я создал свой собственный семафор для Silverlight .

...