响应式扩展——停止流,直到变量被填满



我有以下代码。我的方法有一个字符串返回类型。

public string GetRedemeptionNumber()
{
string _batchNumber = "test";
var _loadBatchName = Observable.ForkJoin(_context.QuerySingleOrDefault(
            _context.GetRedemptionsQuery().Where(x => x.ReceiveBatchName.StartsWith(_batchNumber))
            .OrderByDescending(x => x.ReceiveBatchName)
            .Take(1)))
            .Do(u => _redemptionBatch = u.FirstOrDefault())
                               .Select(x => new Unit())
                               .Finally(() =>
                               {
                                       _batchNumber = _redemptionBatch.Name;
                                      //this doesnt work since a return isnt allowed
                                       return _batchNumber;
                                   }
                               });
        _loadBatchName.Subscribe();

        return _batchNumber;
}

我的问题是这贯穿并返回我的_batchNumber设置之前。所以它返回一个空的_batchNumber。是否有一种方法可以阻止它运行到返回(在我的。finally之外)并等待_batchNumber从我的。finally中填充。

我的代码现在显然不工作,因为我的。finally不允许返回。

你的代码确实有一些问题。

首先,如果你想阻塞直到Rx返回,那么使用Rx没有多大意义。它应该是关于不阻塞。所以你应该返回IObservable<string>而不是string

另外,对于你的查询有OrderByDescending,你必须使用一个可枚举的,而不是一个可观察的,所以你的查询必须变成一个可观察的。

ForkJoin似乎没有为您做任何事情在这个查询。你为什么要用它?

所有的Do &Finally操作符也没有多大意义。

在任何情况下,我都不能重构你的代码,使其可以编译,但我已经接近了。从这个开始,告诉我需要改变什么。

public static IObservable<string> GetRedemeptionNumber()
{
    var _batchNumber = "test";
    var q =
        _context.GetRedemptionsQuery()
        .Where(x => x.ReceiveBatchName.StartsWith(_batchNumber))
        .OrderByDescending(x => x.ReceiveBatchName)
        .Take(1);
    return (from u in _context.QuerySingleOrDefault(q)
            from z in u
            select z.Name).Take(1);
}

相关内容

  • 没有找到相关文章