В настоящее время я работаю над написанием моей собственной неорганизованной P2P-сети (просто для развлечения) и пытаюсь изучить asyn c. Я хочу вызвать следующую функцию, которая вернет фрагмент byte [] отправляемого файла. Затем основная функция делегирует передачу этого фрагмента. Возможно ли, чтобы функция возвращала данные несколько раз, ожидая передачи предыдущего фрагмента в fini sh, прежде чем читать следующий фрагмент в память? Я знаю, что могу написать функцию, которая будет просто вызываться несколько раз с аргументами отслеживания индекса, но я хотел бы использовать asyn c, если возможно, поскольку это кажется идеальным вариантом использования.
public async Task<byte[]> ChunkData(string str)
{
byte[] tempData = new byte[BUFFER_SIZE]; //Stores one chunk of data
byte[] dataBytes = Encoding.Default.GetBytes(str); //Stores all data TODO: convert to filestream
int extraBytes = 0; //Track any extra bytes after we have exhausted full chunks
int dataChunks = dataBytes.Length / BUFFER_SIZE; //Determine how many chunks are in the file
for (int i = 0; i <= dataChunks; i++) //Loop for all dataChunks and once more for extraBytes
{
if (i == dataChunks) //Last iteration
{
extraBytes = dataBytes.Length - dataChunks * BUFFER_SIZE;
if (extraBytes == 0) break; //Break if no extra bytes
}
int endPoint = dataChunks > 0 ? (BUFFER_SIZE * (i != dataChunks ? (i + 1) : i)) : 0;
int frontPoint = i == 0 ? 0 : (BUFFER_SIZE * i);
tempData = dataBytes[frontPoint..(endPoint + extraBytes)]; //Assign tempData to range
Console.WriteLine(Encoding.Default.GetString(tempData)); //For debugging
}
}