c# - que - static java
¿Cómo debo usar las clases/métodos estáticos en las operaciones async/await? (1)
Mi enfoque es no utilizar métodos y clases estáticos en operaciones asíncronas, a menos que se implemente alguna técnica de bloqueo para evitar condiciones de carrera.
Ahora se ha introducido async / await en el framework c # 4.5+, lo que simplifica las aplicaciones multiproceso y fomenta la IU receptiva.
Sin embargo, como un candado no puede / no debe colocarse sobre un método en espera (y no estoy debatiendo eso) ¿eso ahora hace que los métodos estáticos que utilizan async / await sean completamente redundantes?
Mi enfoque es no utilizar métodos y clases estáticos en operaciones asíncronas, a menos que se implemente alguna técnica de bloqueo para evitar condiciones de carrera.
¿Por qué? A menos que estés usando estado compartido, no debería haber condiciones de carrera. Por ejemplo, considere:
public static async Task<int> GetPageLength(string url)
{
string text = await new WebClient().DownloadStringTaskAsync(url);
return text.Length;
}
Si tiene estado compartido, o si está en un método de instancia en una instancia que utilizan varios subprocesos, debe averiguar cómo desearía idealmente que su operación asincrónica funcione. Una vez que haya decidido cómo se comportarán las distintas razas, implementarlo realmente puede ser bastante sencillo.