不使用Observable.create()时如何检查订阅状态?

时间:2016-03-24 22:11:27

标签: java android rx-java reactive-programming

假设你有一个长期运行的任务被一个observable包裹着:

Observable.fromCallable(new Callable<String>() {
    @Override
    public String call() throws Exception {
        return longRunningTask();
    }
}

有没有办法检查观察者是否已取消订阅以确定我们是否应取消工作并纾困?

更具体地说,是否可以在使用isUnsubscribed()Observable.defer()时检查订阅的状态(例如Observable.fromCallable()

我知道您在使用subscriber.isUnsubscribed()时可以检查Observable.create(),但是,因为使用Observable.create()是不明智的,如何与其他运营商一起完成?

2 个答案:

答案 0 :(得分:1)

使用Observable.doOnSubscribe(Action0)Observable.doOnUnsubscribe(Action0)怎么样?您可以计算订阅数,如果没有,您可以停止工作。

问候, 马丁

答案 1 :(得分:0)

<ul id="sortable" style="list-style-type: none; padding-left: 0px;"> @foreach (var image in Model.ViewImages.OrderBy(i => i.Ordering)) { <li id="@image.YogaSpaceImageId" class="col-sm-6 col-md-4 imagethumbs" data-yogaspaceid="@Model.YogaSpaceId"> <div class="thumbnail" style="background-color: lightgrey;"> <a id="@image.YogaSpaceImageId" class="close removethumb" href="#" style="padding-top: 2px; position: absolute; z-index: 3000;"><span class="glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px;"></span></a> @{ var base64 = Convert.ToBase64String(image.ImageThumbnail); var thumbSrc = String.Format("data:image/gif;base64,{0}", base64); var base64Modal = Convert.ToBase64String(image.Image); var imgSrcModal = String.Format("data:image/gif;base64,{0}", base64Modal); var imageId = "pop" + image.YogaSpaceImageId; var imagesourceId = "imagesource" + image.YogaSpaceImageId; } @* <a class="image" id="@imageId" href="" data-toggle="modal" data-target="#myModal"> <img id="@imagesourceId" src="@thumbSrc" data-imagesrc="@imgSrcModal" alt="image not found" width="203" height="136" /> </a>*@ <a class="image" id="@imageId" href="" data-toggle="modal" data-target="#myModal" style="width: 100%; height: 100%; position: relative;"> <img id="@imagesourceId" src="@thumbSrc" data-imagesrc="@imgSrcModal" alt="image not found" style="width: 100%; height: 100%" @*width="203" height="136" *@ /> </a> </div> </li> } </ul>不会暴露消费者。为此,您需要fromCallable以及如下所示的正文:

create