ThreadsafeFileStream is probably a more apt name. Async does not mean threadsafe, and vice versa.
On 12/19/05, Peter Ritchie <[EMAIL PROTECTED]> wrote: > > If you want it to be thread-safe (which seems to be the intention of > wanting an atomic BeginWrite that accepts offset and data to be any > different than calling Seek/BeginWrite), it's quite a bit more > complicated. Each call to BeginWrite would have to allocate a new > OVERALAPPED structure to atomically track that individual write, and > somehow store it in the IAsyncResult object it returns. > > You'd probably also want the event handle for each of those writes to be > monitored on individual threads so when it calls the application's > callback it doesn't block the completion of any other writes. Again, > because we want to add more than Seek/BeginWrite already offers. > > Nothing ground-breaking to implementing this; but, not the "pretty easy" > you seem to think. > > BTW, FileStream.BeginWrite is already asynchronous; "AsyncFileStream" > doesn't make sense. > > http://www.peterRitchie.com/ > > On Mon, 19 Dec 2005 09:09:52 -0600, John Davis <[EMAIL PROTECTED]> wrote: > > >Fair enough, we need an AsyncFileStream class which inherits from > FileStream > >and has BeginWrite/Read methods on it which contain file offset > arguments. > >This should be pretty easy since all the async code in there is already > >running off of OVERLAPPED structs. > > > > > >>From: Ian Griffiths <[EMAIL PROTECTED]> > >>Reply-To: "Discussion of advanced .NET topics." > >><[email protected]> > >>To: [email protected] > >>Subject: Re: [ADVANCED-DOTNET] Possible defect in BeginWrite on > FileStream > >>Date: Sat, 17 Dec 2005 14:00:57 -0000 > >> > >>It seems to me that there's a clear difference between what Seek gives > >>you and what you're asking for. (Otherwise you wouldn't be asking for > >>it.) I admit that I chose poor terminology to describe the feature: I > >>should have said "concurrent random access" rather than just "random > >>access". But I stand by my assertion that it shouldn't be in Stream. > >> > >>The problem I have with adding this to the Stream abstraction is that > >>all of a sudden, *every* Stream has to support it. > >> > >>So you undoubtedly *could* have something not dissimilar to Stream that > >>support concurrent random access. But if you made this a feature of > >>Stream you just made it mandatory for every implementation of Stream to > >>support this. > >> > >>That makes it a non-starter for where we are today - this suggestion > >>will never fly because Stream shipped almost 4 years ago, and there's no > >>way to go and add this functionality retrospectively to all the Streams > >>everyone has implemented ever since. > >> > >>Given where we are, the only way to add this functionality would be to > >>introduce a new more specialized abstraction. (Either specifically to > >>files, or possibly as some new AsyncStream abstraction.) > >> > >>So this leaves this discussion as an academic question: should Stream > >>have had this functionality from the start? > >> > >>I think Stream's better without this, because this extra feature would > >>increase the cost of implementing Stream. And this is the tradeoff you > >>often get with abstractions: making them rich enough to be useful but > >>simple enough that anyone can be bothered to implement them. > >> > >>Mandating that all streams that support seeking also support concurrent > >>random access seems like a high tax to impose on implementing Stream. > >> > >>If everyone were clamouring for it, then it'd be reasonable. But > >>they're not. I've worked on a wide range of .NET projects in the years > >>since .NET shipped, and while I can appreciate in abstract that this > >>would be a nice feature, I've never run into a scenario where this would > >>have been useful in practice. (But I have run into scenarios where I > >>wanted to implement Stream. So this feature would have been a net loss > >>for me.) > >> > >>More tellingly, you rarely see anyone asking for it on public forums. As > >>far as I can tell from the various mailing lists, newsgroups, and forums > >>I've hung out on, my experience of never having come across a concrete > >>need for this is more common than your experience. > >> > >>Which suggests that Microsoft made the right decision: Stream would have > >>been the wrong place to put support for concurrent random access. > >> > >>So even if you were starting from a clean slate, and wanted v1.0 of the > >>framework to offer this functionality (and I agree it would be nice to > >>have, despite the fact that I've never actually needed it) I still think > >>it would be a mistake to put something this specialized into something > >>as generic as Stream. > >> > >>It's at best a poor match (and at worst, inappropriate) for most > >>implementations of Stream. For the implementations of Stream for which > >>it's appropriate, it's not useful most of the time. > >> > >>To steal a phrase that Ron Jeffries recently used on the TDD mailing > >>list: > >> > >> " it would be a bit like having a #10 Torx driver as part > >> of my hammer. Occasionally useful but also an odd addition." > >> > >> > >>Of course it's hugely frustrating if you happen to hit the case where > >>you want to do something that you know would be pretty easy for the > >>underlying implementation you happen to be using. But that doesn't > >>translate into an argument that Stream is designed wrong. > >> > > =================================== > This list is hosted by DevelopMentor(r) http://www.develop.com > > View archives and manage your subscription(s) at > http://discuss.develop.com > -- Eric Means [EMAIL PROTECTED] http://www.randomtree.org/eric/ =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com
