Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Tipos referencia anulables en C# 8
José María Aguilar - Concatenando un string multilínea en C#
José María Aguilar
.NET Core / .NET
- Introducing C# 10: Structs parameterless constructor and instance field initializer
Anthony Giretti - Improve C# code performance with Span<T>
Patrick Smacchia - The pain points of C# source generators: February 2022 Update
James Turner - Early peek at C# 11 features
Kathleen Dollard - Requiring two-factor authentication on NuGet.org
Claire Novotny - Please stop lying about .NET Standard 2.0 support!
Andrew Lock - Devs Sound Off on C# 11 Preview Features Like Parameter Null Checking
David Ramel - Using RestSharp To Consume APIs in C#
Marinko Spasojevic - Cancellation, Part 1: Overview
Stephen Cleary - Recommended container limits for dotnet-monitor
Mark Downie - Convert Country Name To Flag Emoji in C# & the .NET ecosystem
The First Prototype - Getting Started With .NET 7.0
Satya Karki - How to Upload a File to Azure Blob Storage
Claudio Bernasconi - Alias: An approach to .NET Assembly Conflict Resolution
Bruno Garcia & Simon Cropp
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Aún no hemos terminado de asimilar las novedades de C# 10, cuando ya empiezan a llegar noticias de lo que encontraremos en la próxima versión, C# 11, que si todo va bien se lanzará en noviembre de este año.
Una de las que más me ha llamado la atención de momento es la llegada de raw string literals, una característica que mejorará bastante la posibilidad de escribir constantes de cadena multilínea en nuestro código.
Veamos en qué consiste.
Disclaimer: la nueva versión de C# está aún en desarrollo, y detalles de los que veamos aquí podrían cambiar antes de lanzarse definitivamente.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Null coalescing assigment "??=", el nuevo operador de asignación en C# 8
José María Aguilar - Constantes string multilínea en C#
José María Aguilar
.NET Core / .NET
- Lenguaje C#: coincidencia de modelos - Parte 2: Uso de expresiones en el switch
Rubén Rubio - Announcing .NET 7 Preview 1
Jeremy Likness - .NET and C# Versions - 20th Anniversary
Niels Rasmussen - My 20 Years with .NET
Mark Rendle - Announcing ImageSharp 2.0.0
Six Labors - C# Nullable Features thru the times
Christian Nagel - AutoMapper, Nullable DateTime, and Selecting the Right Constructor
Travis Illig - Operator Overloading in C#
Marinko Spasojevic - Logging Trace Output Using ILogger in .NET Applications
Khalid Abuhakmeh - Introducing Compatible Packages on NuGet.org
Jon Douglas - Server-side JavaScript for .NET developers – Part I (Node.js fundamentals)
Daniel Jiménez García - C# 11.0 preview: parameter null checking
Ian Griffiths - 7 Improvements You Might Have Missed in .NET 6
Matthew MacDonald - C#11 Parameter Null Checking
Wade Gausden - Use a .NET Worker Service to run background services
David Grace
Seguimos descubriendo novedades aparecidas con .NET 6, y ahora le toca el turno a la nueva clase PeriodicTimer
, una fórmula para la ejecución de tareas periódicas en contextos asíncronos que evita el uso de los clásicos callbacks a los que nos tenía acostumbrados el framework.
Como recordaréis, .NET dispone de un buen número de formas de implementar temporizadores, o timers, para ejecutar tareas en intervalos periódicos. El más conocido probablemente sea el clásico System.Threading.Timer
, en el que especificábamos el callback o método que debía ejecutarse en cada intervalo de tiempo mediante un delegado (en el siguiente ejemplo, mediante una lambda):
var timer = new System.Threading.Timer(o =>
{
Console.WriteLine("Hey! " + DateTime.Now.ToLongTimeString());
}, null, 0, 1000);
Console.ReadKey();
Hey! 12:25:51
Hey! 12:25:52
Hey! 12:25:53
Hey! 12:25:54
Hey! 12:25:55
_
Pero también existía System.Timers.Timer
, que nos permitía lograr algo parecido, aunque esta el callback lo implementábamos mediante una suscripción al evento Elapsed
del objeto:
var timer = new System.Timers.Timer(1000);
timer.Elapsed += (sender, eventArgs) =>
{
Console.WriteLine("Hey! " + DateTime.Now.ToLongTimeString());
};
timer.Start();
Console.ReadKey();
Existían algunas fórmulas más específicas para plataformas concretas, como las clases System.Windows.Forms.Timer
, System.Web.UI.Timer
u otras. Sin embargo, todas coincidían en varias cosas:
- Utilizaban callbacks de alguna u otra forma, lo que implica un cierto riesgo de leaks de memoria y problemas con los tiempos de vida de objetos cuando la cosa se complica.
- Los callbacks no permitían código asíncrono, lo que podía llevarnos a luchar contra los engorrosos escenarios de ejecución de código asíncrono en entornos síncronos (async-over-sync).
- Podían darse casos de superposición u overlapping entre las distintas ejecuciones, cuando éstas tardaban en completarse más que el intervalo de definido en el timer.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- 10 razones por las que tu blog te ayuda a encontrar empleo
José María Aguilar - Etiquetado de consultas en Entity Framework 6
José María Aguilar
.NET Core / .NET
- Lenguaje C#: Coincidencia de modelos - Parte 1: Fundamentos
Rubén Rubio - Happy 20th Anniversary, .NET!
Beth Massi - Debug attributes in .NET
Steve Dunn - Unit Tests for Expected Exceptions
Jeremy D. Miller - Creating and Using HTTP Client SDKs in .NET 6 Oleksii Nikiforov
- Avoid DNS issues with HttpClient in .NET
Gérald Barré - Using OpenAPI Generator To Scaffold APIs And API Clients
Wade Gausden - NetEscapades.EnumGenerators: a source generator for enum performance
Andrew Lock - Async streams in C# – Deep Dive
Damir Arh - What is the cost of casting in .NET (C#)?
Jiří Činčura - Migrate from .NET Framework to .NET Core (.NET 6)
Sanjay M. - Download, parse, and store SSL certificates in C#
Thomas Ardal - Improvements and Optimizations for Interpolated Strings – A Look at New Language Features in C# 10
Alexandra Kolesova - C# Tip: Exception handling with WHEN clause
Davide Bellone - Measuring Performance After Migration from .NET5 to .NET 6
Dmitry Kulagin - C# 10.0 improves handling of nullable references in generic types
Ian Griffiths - Diagnosing and Fixing MediatR Container Issues
Jimmy Bogard - Using Azure Active Directory B2C with .NET
Christian Nagel - Attribute on attribute itself
Jiří Činčura - Introducing FakeAuth for .NET Core
Caleb Jenkins - ThunderboltIoc: .NET Dependency Injection without Reflection!
Aly Elhaddad
Dada una petición como la siguiente:
POST https://localhost:5001/friends HTTP/1.1
Host: localhost:5001
Content-Type: application/json
{ "name": "Jon", "age": 24 }
Lo habitual es que queramos recibir los datos ya materializados en forma de objeto de .NET. Esto podemos conseguirlo fácilmente desde una acción como la siguiente:
[Route("friends")]
public class FriendsController : Controller
{
[HttpPost]
public ActionResult Test([FromBody]Friend friend)
{
return Content($"Hello, {friend.Name}, you are {friend.Age} years old");
}
}
Pero aunque no es algo que ocurra con frecuencia, a veces podríamos necesitar recibir el cuerpo JSON de una petición como string
, es decir, en crudo, sin deserializarlo ni procesarlo de ninguna manera para, ya más adelante, hacerlo nosotros manualmente. Y aunque a primera vista pudiera resultar trivial, tiene un poco más de truco de lo que parece...