Подпишись на наш Twitter

Быть в курсе появления новых статей!

Несмотря на то, что Reactive Extensions очищают после себя, вы все равно должны управлять ограниченными ресурсами и освобождать любые неуправляемые ресурсы.

Как вариант вы можете использовать выражение с Observables.

Чтобы это сделать, вызовите параметризованный статический метод Using у Observable. Он возвращает IObservable<char> и принимает два параметра. Первый параметр является функцией (Func), которая возвращает streamReader, а второй является функцией (Func), которая принимает StreamReader сделанный в первом и возвращает IObservable из типа char.

Параметры шаблона типа Observable создадут (в данном случае символ) и ресурс будут удален, когда наблюдаемая последовательность утилизируется (в данном случае поток).

var ObservableStrings =
    Observable.Using 
)

Первый из двух параметров создает streamReader и открывает поток типа FileStream к файлы в той же директории, что и программа.

() => new StreamReader(
    new FileStream(
      "randomstrings.txt", FileMode.Open)),

Второй параметр использует созданный streamReader и читает из потока до конца (создается массив строк). Массив становится observable при вызове ToObservable над ним.

streamReader =>
(
    from str in streamReader.ReadToEnd()
    select str
).ToObservable()

Мы можем подписаться на только что созданный ObsevableStrings и показать найденные строки из тектового документа. Ниже код полной программы:

class Program
{
    static void Main( string[ ] args )
    {
        var ObservableStrings =
             Observable.Using
        (
            () => new StreamReader(
               new FileStream(
                     "randomstrings.txt",
                     FileMode.Open ) ),
            streamReader =>
            (
                from str in streamReader.ReadToEnd()
                select str
            )
            .ToObservable()
        );
 
        ObservableStrings.Subscribe( Console.Write ); 
    }
}

Если вы поместите этот код в консольное приложение в Visual Studio, используйте NuGet для получения библиотек Reactive Extension. Дополнительно вам будет нужен текстовый файл в директории ..\bin\debug directory названный randomstrings.txt с текстовым содержимым.

Оригинал: Managing Resources with Reactive Extensions




Дата публикации: 26.05.2011 16:05

Ярлыки: Linq, Reactive Extensions, Tutorial