lunes, 11 de noviembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Ejecutar tareas en segundo plano en ASP.NET 4.x
José María Aguilar - Cómo crear un paquete NuGet y publicarlo en Nuget.org
Jorge Turrado
.NET Core / .NET
- Announcing .NET Core 3.1 Preview 2
Richard Lander - .NET Core 3 for Windows Desktop
Olia Gavrysh - Managing output in the .NET SDK projects
Cezary Piątek - Performance Profiling of .NET Core 3 applications on Linux with dotnet-trace and PerfView
Michael Shpilt - .NET Core with Jupyter Notebooks - Available today | Preview 1
Maria Naggaga - The Most Subtle C# Bugs in 2019: Null Conditional Operator with Any()
Mikael Koskinen - Struct with “main method” as an entry point
Jiří Činčura - TryParse is your friend
Adam Storr - New features of C# 8
Koolprasadd - How to Work with C# Vectors and Matrices for Machine Learning
James McCaffrey - Novedades de C# 8: IAsyncEnumerable
Jorge Turrado
Publicado por José M. Aguilar a las 8:05 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
martes, 5 de noviembre de 2019
Como seguro sabréis, gRPC lleva ya algún tiempo proponiéndose como sustituto de las APIs HTTP/REST en determinados escenarios, y ASP.NET Core 3.0 incluye de serie soporte para esta tecnología.
En este post echaremos un vistazo a gRPC y su uso en la nueva versión del framework.
En este post echaremos un vistazo a gRPC y su uso en la nueva versión del framework.
lunes, 4 de noviembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Invalidar el contenido cacheado por el tag helper "cache" de ASP.NET Core MVC
José María Aguilar - Lanzar el depurador desde Javascript
José María Aguilar
.NET Core / .NET
- Introducing Orleans 3.0
Reuben Bond - How to use Nullable Reference Types in .NET Standard 2.0 and .NET Framework
Gérald Barré - NET Core 3.0 : SDK, Runtime and Set up for Development
Kusnaditjung - The .NET Process class on Linux
Tom Deseyn - How to write to a file with C# in 2019
Thomas Ardal - Defer with C# 8.0
Stuart Lang - Autofac: Eager vs Lazy Construction During Registration
Ken Dale - The history of the GC configs
Maoni Stephens - Trying Out Daily Builds of Roslyn
Stuart Lang
martes, 29 de octubre de 2019
Si soléis utilizar Fiddler para probar APIs, probablemente os resultará algo molesto el hecho de que al arrancarlo directamente comience a capturar todas las peticiones salientes desde vuestro equipo.
Pues bien, tras años sufriendo esto en silencio, he decidido invertir unos minutos a ver si existía una forma de ahorrarme los dichosos segundos que tardaba en desactivar la captura de tráfico cada vez que abría la herramienta.
Y como efectivamente es posible, os dejo la forma de conseguirlo por si hay por ahí algún perezoso más al que pueda interesarle ;)
Pues bien, tras años sufriendo esto en silencio, he decidido invertir unos minutos a ver si existía una forma de ahorrarme los dichosos segundos que tardaba en desactivar la captura de tráfico cada vez que abría la herramienta.
Y como efectivamente es posible, os dejo la forma de conseguirlo por si hay por ahí algún perezoso más al que pueda interesarle ;)
lunes, 28 de octubre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Registro y obtención de múltiples implementaciones de servicios en ASP.NET Core, y un caso práctico
José María Aguilar - Eager loading en Entity Framework: mejora drástica del rendimiento en acceso a datos
José María Aguilar
.NET Core / .NET
- .NET Vector Performance
Frank A. Krueger - JSON Serialization in .NET Core 3: Tiny Difference, Big Consequences
Roland Weigelt - Differences Between .NET Framework, .NET Core, and .NET Standard
Marinko Spasojevic - New in .NET Core 3.0: local tools: Exploring ASP.NET Core 3.0
Andrew Lock - Generating IDs in C#, 'safely' and efficiently
Nima Ara - C# exception handling best practices
Thomas Ardal - C# 8 Positional Patterns Custom Deconstructor Pitfall
Ian Griffiths - Simplifying the Cake global tool bootstrapper scripts with .NET Core 3 local tools
Andrew Lock - Create exceptional interactive documentation with Try .NET
Scott Hanselman - Research based on the .NET Runtime
Matt Warren
martes, 22 de octubre de 2019
Hasta ahora, la generación o enumeración de secuencias era un proceso puramente síncrono. Por ejemplo, si queríamos recorrer un
Por ejemplo, en el siguiente código no teníamos una forma razonable de implementarlo si la obtención de cada uno de los valores retornados desde el método generador tuviera que ser asíncrona:
Pues bien, aparte de características mainstream como la implementación por defecto en interfaces, los tipos referencia anulables, índices y rangos o muchas otras, en la última versión del framework y C# 8 se ha introducido el soporte para la generación y consumo de secuencias asíncronas.
IEnumerable
con un bucle foreach
, cada uno de los elementos debía existir previamente en la colección o bien ser generado de forma síncrona.Por ejemplo, en el siguiente código no teníamos una forma razonable de implementarlo si la obtención de cada uno de los valores retornados desde el método generador tuviera que ser asíncrona:
foreach (var i in GetNumbers())
{
Console.WriteLine(i);
}
IEnumerable<int> GetNumbers()
{
for (var i = 0; i < 1000_000_000; i++)
{
var a = i * 2; // <-- Esto es una operación síncrona,
yield return a; // ¿cómo haríamos si en lugar de esta operación síncrona
// necesitásemos hacer una llamada asíncrona para obtenerlo?
}
}
Aunque convertir el método GetNumbers()
en asíncrono pudiera parecer una alternativa razonable, en realidad no lo es; de hecho, los resultados no llegarían al cliente hasta que hubiéramos generado todos los valores, por lo que sería peor que la primera opción en términos de rendimiento y ocupación de memoria:foreach (var i in await GetNumbersAsync())
{
Console.WriteLine(i);
}
async Task<IEnumerable<int>> GetNumbersAsync()
{
var list = new List<int>();
for (var i = 0; i < 1000_000_000; i++)
{
var a = await Task.FromResult(i * 2); // <-- Aquí generamos los valores usando asincronía,
list.Add(a); // pero el consumidor seguirá esperando hasta
// que los hayamos generado todos.
}
return list; // <-- Aquí retornamos la colección completa
}
En este último caso la llamada a GetNumbersAsync()
se ejecutaría de forma asíncrona, es decir, daríamos la oportunidad al hilo de ejecución actual de dedicarse a otros menesteres mientras la llamada es realizada, desde el punto de vista de su consumidor es a todos los efectos como si se tratara de un método síncrono.Pues bien, aparte de características mainstream como la implementación por defecto en interfaces, los tipos referencia anulables, índices y rangos o muchas otras, en la última versión del framework y C# 8 se ha introducido el soporte para la generación y consumo de secuencias asíncronas.