Jeg er ved at lære mig selv om async og await, så har taget udgangspunkt i flytning af store filer.
Har taget udgangspunkt i følgende kode:
- private void CopyFile(string source, string dest)
- {
- using (FileStream sourceStream = new FileStream(source, FileMode.Open))
- {
- byte[] buffer = new byte[256 * 1024]; // Change to suitable size after testing performance
- using (FileStream destStream = new FileStream(dest, FileMode.Create))
- {
- int i;
- while ((i = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
- {
- destStream.Write(buffer, 0, i);
- }
- }
- }
- }
Det som jeg så ville gøre i stedet var:
1) at have en metode til at læse BufferBits ind i en liste.
2) læse BufferBits til en fil.
Således kan en tråd læse, og en tråd skrive for at udnytte processerne bedre.
Problemet er så at min kode soo far bliver afviklet synkront
Hjælp mig her.
- public List<BufferBits> BufferList = new List<BufferBits>();
- public bool ReadToEnd = false;
-
-
- private void button2_Click(object sender, EventArgs e)
- {
- string source = @"Y:\Film\Coming To America (1988)\Coming To America 1988.mp4";
- string dest = @"C:\Temp\xx.tmp";
- ReadWriteFile(source, dest);
- }
-
- public async Task ReadWriteFile(string source, string dest)
- {
- Task<long> InputLengthTask = ReadFile(source); //Burde fortsætte til WriteFile fordi ReadFile er async?
- Task<long> OutputLengthTask = WriteFile(dest);
- long InputResult = await InputLengthTask;
- long OutputResult = await OutputLengthTask;
- }
-
- public async Task<long> WriteFile(string destination)
- {
- int i = 0;
- MemoryStream memStream = new MemoryStream();
- BufferBits bb;
- while (!ReadToEnd)
- {
- bb = null;
- try
- {
- bb = BufferList.ElementAt(i);
- }
- catch (Exception ex)
- {
- continue;
- }
-
-
- if (bb != null)
- {
- i++;
- memStream.Write(bb.ByteArray, bb.Offset, bb.Count);
- }
- }
- return memStream.Length;
- }
-
- public class BufferBits
- {
- public byte[] ByteArray { get; set; }
- public int Offset { get; set; }
- public int Count { get; set; }
-
- public BufferBits(byte[] buffer, int offset, int count)
- {
- this.ByteArray = buffer;
- this.Offset = offset;
- this.Count = count;
- }
- }