gpt4 book ai didi

c# - 执行一个命令直到另一个命令完成

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:03 25 4
gpt4 key购买 nike

我有这样的东西:

this.WhenAnyValue(x => x.SearchText)
.Where(text => !string.IsNullOrempty(text))
.Throttle(TimeSpan.FromSeconds(0.25))
.InvokeCommand(searchCmd);

其中 SearchText 是一个绑定(bind)到文本框的字符串属性,而 searchCmd 是一个 ReactiveCommand。

我想要的是,如果 searchCmd 已经在运行,则 observable 应该等待。例如,如果用户键入“gener”,稍停片刻后键入“ally”,该命令将仍在运行,并且不会执行“generally”,只会执行“gener”。

有什么想法吗?

编辑:我在做什么(看起来它有效):

首先我添加了一个 OAPH:

readonly ObservableAsPropertyHelper<bool> isCmdRunning;

还有一个属性:

public bool IsCmdRunning => isCmdRunning.Value;

然后,在构造函数中:

this.searchCmd.IsExecuting
.ToProperty(this, x => x.IsCmdRunning, out isCmdRunning);

最后:

this.WhenAnyValue(x => x.SearchText, x => x.IsCmdRunning, (search, running) => new {Search = search, Running = running})
.Where(value => !string.IsNullOrempty(value.Search) && !value.Running)
.Throttle(TimeSpan.FromSeconds(0.25))
.Select(value => value.Search)
.InvokeCommand(searchCmd);

但是不知道有没有更好的办法。

最佳答案

我认为使用 CancellationToken 是一个很好的解决方案。

搜索命令:

Search = ReactiveCommand.CreateFromObservable(
() => Observable
.StartAsync(ct => SearchImpl(ct))
.TakeUntil(CancelSearch));

取消搜索命令:

CancelSearch = Command.Create(() => {}, Search.IsExecuting);

最后:

this.WhenAnyValue(x => x.SearchText)
.Do(_ => Observable.Return(Unit.Default).InvokeCommand(CancelSearch))
.Throttle(TimeSpan.FromSeconds(0.25))
.InvokeCommand(searchCmd);

关于c# - 执行一个命令直到另一个命令完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com