Регулирование событий и методы блокировки

Давайте представим, что у меня есть что-то вроде этого:

<TextBox Text="{Binding Text, Mode=TwoWay}" />

И как то так:

public class MyViewModel : INotifyPropertyChanged
{
    public MyViewModel()
    {
        // run DoWork() when this.Text changes
        Observable.FromEventPattern<PropertyChangedEventArgs>(this, "PropertyChanged")
            .Where(x => x.EventArgs.PropertyName.Equals("Text"))
            .Subscribe(async x => await DoWork());
    }

    private async Task DoWork()
    {
        await Task.Delay(this.Text.Length * 100);
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private string _Text = "Hello World";
    public string Text
    {
        get { return _Text; }
        set
        {
            _Text = value;
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs("Text"));
        }
    }
}

В этом случае пользователь может очень быстро печатать. Я нуждаюсь:

DoWork () не должен запускаться, когда DoWork () уже запущен

Пользователь может ввести рывками, некоторые изменения, паузы, некоторые изменения

DoWork () не требуется для каждого изменения, только последнее изменение

Нет необходимости, чтобы DoWork () вызывался чаще, чем за 1 секунду

DoWork () не может ждать до последнего изменения, если скорость> 1 секунды

DoWork () не следует вызывать во время простоя системы

Продолжительность DoWork () варьируется в зависимости от длины этого. Текст

Вопрос не в том, может ли Rx сделать это. Я знаю, что может. Какой правильный синтаксис?

Ответы на вопрос(5)

Ваш ответ на вопрос