есть два варианта, в зависимости от размера.Если размер небольшой, , вероятно, , лучший вариант - просто синхронизировать доступ к файлу с помощью какой-либо общей блокировки.Если возможно, было бы также хорошей идеей, чтобы файл оставался открытым (иногда сбрасывался), а не постоянно открывался / закрывался.Например:
class MeaningfulName : IDisposable {
FileStream file;
readonly object syncLock = new object();
public MeaningfulName(string path) {
file = new FileStream(fileName, FileMode.Append, FileAccess.Write,
FileShare.ReadWrite, 8192);
}
public void Dispose() {
if(file != null) {
file.Dispose();
file = null;
}
}
public void Append(byte[] buffer) {
if(file == null) throw new ObjectDisposedException(GetType().Name);
lock(syncLock) { // only 1 thread can be appending at a time
file.Write(buffer, 0, buffer.Length);
file.Flush();
}
}
}
Это потокобезопасно и может быть доступно всем ashx без проблем.
Однако для больших данных вы можете захотеть взглянуть на синхронизированныйочередь чтения-записи - т. е. все авторы (обращения Ashx) могут перебрасывать данные в очередь, причем один выделенный поток записи снимает их с очереди и добавляет.Это удаляет время ввода-вывода из ashx, однако вы можете ограничить размер очереди на тот случай, если писатель не успевает за ней.Здесь приведен пример закрытой синхронизированной очереди чтения / записи .