Это дизайнерское решение было принято давно, давным-давно. Более 21 года назад, задолго до появления .NET, или когда-либо рассматривалась семантика IDisposable. Класс .NET Mutex является классом обертки для базовой поддержки операционной системы для мьютексов. Конструктор pinvokes CreateMutex , метод WaitOne () pinvokes WaitForSingleObject () .
Обратите внимание на возвращаемое WAIT_ABANDONED значение WaitForSingleObject (), это тот, который генерирует исключение.
Дизайнеры Windows поместили твердое правило, в котором поток, который владеет мьютексом, должен вызывать ReleaseMutex () до его выхода. И если это не значит, что это очень сильное указание на то, что поток неожиданно завершен, как правило, через исключение. Это означает, что синхронизация потеряна, очень серьезная проблема с потоками. Сравните с Thread.Abort (), очень опасным способом прервать поток в .NET по той же причине.
Разработчики .NET никоим образом не изменяли это поведение. Не в последнюю очередь потому, что нет никакого способа проверить состояние мьютекса, кроме как выполнить ожидание. Вы должны вызывать ReleaseMutex (). И обратите внимание, что ваш второй фрагмент не является правильным; вы не можете называть это мьютексом, который вы не получили. Он должен быть перемещен внутри тела оператора if ().
В документации сказано, что formatter
принимает функцию, поэтому вы должны либо дать ей одну из предопределенных функций, либо функцию, которую вы определяете сами.
Важно, что это функция обратного вызова , поэтому вам не нужно вызывать ее или отправлять параметры. Компонент <TimeAgo ...
вызовет функцию с параметрами, перечисленными в документации, для получения окончательной отформатированной строки.
Одна из их функций форматирования:
import frenchStrings from 'react-timeago/lib/language-strings/fr'
import buildFormatter from 'react-timeago/lib/formatters/buildFormatter'
Вы даете функцию опоре formatter
, которую react-timeago
будет использовать внутри.
Пример
<TimeAgo
date={this.state.time}
formatter={(value, unit, suffix) => `${value} ${unit} ${suffix}`}
live={true}
/>