Потоки.NET, передающие потоки между объектами, лучшие практики (C#)

Это, кажется, работает хорошо для меня до сих пор:

//Checks if a touch screen
is_touch_screen = 'ontouchstart' in document.documentElement;

if (is_touch_screen) {
  // Do something if a touch screen
}
else {
  // Not a touch screen (i.e. desktop)
}
9
задан John Saunders 24 June 2009 в 22:08
поделиться

4 ответа

Как правило, потребитель несет ответственность за надлежащую утилизацию Одноразового объекта. Таким образом, если вы передаете Stream другому объекту, вам не следует его удалять - это будет ответственность потребителя.

Таким образом, в четко определенных сценариях вы либо держите ссылку на объект Disposable, либо в этом случае вы должны убедиться, что он правильно утилизирован; или вы передаете ссылку кому-то другому и забываете о ней.

А как насчет тех случаев, когда вам нужно сохранить ссылку самому, но все же передать ее? В этих случаях передайте копию ресурса Disposable - это позволит вам и потребителю управлять временем жизни двух экземпляров независимо друг от друга. Однако, если вы попали в такую ​​ситуацию, вам следует пересмотреть свой дизайн, поскольку я бы назвал это запахом кода.

12
ответ дан 4 December 2019 в 14:30
поделиться

Если что-то еще использует поток после того, как ассемблер закончил с ним, ассемблер не должен «владеть» потоком. Вызывающий должен либо создать поток для использования ассемблером (и последующими модулями), либо ассемблер должен вернуть новый поток, который затем должен закрыть вызывающий.

Было бы поучительно увидеть некоторые дополнительные сведения о том, что как выглядит архитектура вашей программы и какие методы мы здесь обсуждаем.

2
ответ дан 4 December 2019 в 14:30
поделиться

В целом я согласен с предыдущими комментариями. Однако, если ваша модель не подходит для этого, вы можете сделать то же, что Microsoft сделала с XML Writer: он принимает параметр XMLWriterSettings, когда вы его создаете, и одно из свойств объекта настроек описывает, должен ли писатель закрывать базовый поток, когда писатель избавлен.

0
ответ дан 4 December 2019 в 14:30
поделиться

Я делал эти проекты в TECS следующим образом:

  • читать каждую строку в файле
  • обрезать пробелы в начале и конце строки
  • , если строка пуста или если он начинается с //, перейдите к следующей строке
  • в противном случае сохраните строку в массиве (в C # я фактически использую объект List )

Как только я просмотрел все строки , Я могу закрыть поток файлов и безопасно работать с массивом строк.

0
ответ дан 4 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: