私は、複数のクライアントを持つことができる非同期サーバーを作成しています。チャットクライアント/サーバアーキテクチャと同様に、すべてのクライアントは、クライアントの要求に基づいて各サーバの状態が変更されたときに更新されます。私は、多くの例があり、テストのための簡単なアプリケーションを書いています。私はちょうど今クライアント要求の処理を書いてきましたが、通常は遭遇しない状況に遭遇しました。ここで私が書いたサンプルサーバーだ:タスクは常に待つべきですか?
class Server
{
int _port;
TcpListener _listener;
IList<TcpClient> _clients = new List<TcpClient>();
public Server(int port)
{
_port = port;
_listener = new TcpListener(IPAddress.Any, _port);
}
public async Task StartListening()
{
_listener.Start();
Console.WriteLine("The server is listening on port {0}...", _port);
while (true)
{
try
{
var client = await _listener.AcceptTcpClientAsync();
Console.WriteLine("We have a client!");
_clients.Add(client);
Process(client);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
private async Task Process(TcpClient client)
{
try
{
var stream = client.GetStream();
var reader = new StreamReader(stream);
var writer = new StreamWriter(stream) { AutoFlush = true };
char[] buffer = new char[1024];
while (true)
{
var request = await reader.ReadLineAsync();
if (request != null)
{
Console.WriteLine(request);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
client.Close();
}
}
}
ここでのProgram.csです:
class Program
{
static void Main(string[] args)
{
var server = new Server(6029);
server.StartListening().Wait();
}
}
タスクが待たれていないので、私はプロセスの呼び出しに警告が表示されます。私は呼び出し待ちのないコードの動作を理解していますが、これは私が必要とする動作を与えても、これを別に(ThreadPoolなど)コーディングしなければならないかと思います。タスクはいつも待たれるべきですか?
'タスクが常に待たれるべき' NO ...火&忘れて作業はまた、いくつかの用途があります..? –