{"id":1933,"date":"2015-05-11T19:23:47","date_gmt":"2015-05-11T19:23:46","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1933"},"modified":"2025-06-13T23:49:46","modified_gmt":"2025-06-14T06:49:46","slug":"introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/","title":{"rendered":"Presentamos Couchbase .NET SDK 2.1.0: \u00a1El cliente as\u00edncrono de Couchbase .NET!"},"content":{"rendered":"<p>\u00a1Por fin est\u00e1 disponible el Couchbase .NET SDK 2.1.0 GA! Esta versi\u00f3n es una versi\u00f3n menor para 2.1.0, pero incluye soporte para el Patr\u00f3n de Asincron\u00eda de Tareas (palabras clave async y await) e IO no bloqueante para todas las operaciones Clave\/Valor. Adem\u00e1s, se han incluido otras caracter\u00edsticas:<\/p>\n<ul>\n<li>Ajustes KEEP_ALIVE TCP por conexi\u00f3n<\/li>\n<li>Nuevos puntos de ampliaci\u00f3n para crear transcodificadores, serializadores y conversores \"enchufables\".<\/li>\n<li>Soporte de \"Get and Touch\" para el deslizamiento de vencimientos en pares clave\/valor.<\/li>\n<li>Soporte oficial para el m\u00e9todo \"la llave existe<\/li>\n<\/ul>\n<p>Otras mejoras y correcciones de errores incluyen una correcci\u00f3n de las lecturas de r\u00e9plica, un nuevo motor de petici\u00f3n de consultas para gestionar las incoherencias y los errores durante los escenarios de intercambio\/reequilibrio\/recuperaci\u00f3n y una pl\u00e9tora de otras correcciones de errores y mejoras (m\u00e1s de 45 tickets de Jira cerrados). \u00a1Esta versi\u00f3n es JUGGED!<\/p>\n<p>En las pr\u00f3ximas dos secciones repasar\u00e9 brevemente las principales funciones de esta versi\u00f3n; en un futuro pr\u00f3ximo se publicar\u00e1n art\u00edculos m\u00e1s extensos en los que se profundizar\u00e1 en cada una de ellas.<\/p>\n<h2>Patr\u00f3n de asincron\u00eda de tareas compatible con K\/V<\/h2>\n<p>Todo el motor IO ha sido renovado en esta versi\u00f3n para soportar IO no bloqueante; para aprovechar esta caracter\u00edstica la hemos expuesto a trav\u00e9s de las palabras clave async y await. Si no est\u00e1s familiarizado con las palabras clave async\/await y el TAP (Task Asynchrony Pattern), puede que quieras saltar y leer <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/hh191443%28v=vs.110%29.aspx\">este<\/a>o <a href=\"https:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2012\/04\/03\/async-in-4-5-worth-the-await.aspx\">este<\/a>o <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/hh156528.aspx\">este<\/a> antes de continuar.<\/p>\n<p>Sin entrar en demasiados detalles (habr\u00e1 una inmersi\u00f3n profunda en otro, futuro post), he aqu\u00ed un ejemplo de uso de async\/await y el SDK de Couchbase para insertar y recuperar una clave de un cluster de Couchbase:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/417dbe9ff0f1b001c464.js\"><\/script><\/p>\n<p>La primera diferencia que notar\u00e1s es que la firma del m\u00e9todo ahora tiene la palabra clave async a\u00f1adida; esto har\u00e1 posible usar la palabra clave await dentro del cuerpo del m\u00e9todo. Cuando el m\u00e9todo se ejecute, lo har\u00e1 de forma s\u00edncrona hasta que llegue a la palabra clave await, entonces ser\u00e1 \"levantado\" y se ejecutar\u00e1 de forma as\u00edncrona. Hay un poco de magia de compilador involucrada aqu\u00ed en el lado .NET, \u00a1pero eso es todo lo que necesitas hacer para escribir c\u00f3digo as\u00edncrono usando el SDK .NET de Couchbase!<\/p>\n<p>Dentro del SDK .NET de Couchbase, se crear\u00e1 una tarea y se almacenar\u00e1 en la cola; la petici\u00f3n se enviar\u00e1 al servidor de Couchbase de una manera \"disparar y olvidar\" (a trav\u00e9s de IOCP) y cuando se complete se lanzar\u00e1 un callback que completar\u00e1 la solicitud mediante la lectura de la respuesta y la devolver\u00e1 a la persona que llama. Si se produce un error o una excepci\u00f3n, se gestionar\u00e1 y se devolver\u00e1 como la implementaci\u00f3n IOperationResult que encapsula la tarea. Una vez m\u00e1s, \u00a1espera una profundizaci\u00f3n en un futuro post!<\/p>\n<h2>Nuevos puntos de ampliaci\u00f3n<\/h2>\n<p>Uno de los objetivos del SDK 2.0 era proporcionar puntos de ampliaci\u00f3n para los distintos componentes del SDK; si no le gusta nuestra implementaci\u00f3n o la API externa en la que se basa, \u00a1escriba la suya propia! Otro efecto positivo secundario es que facilita el aislamiento y las pruebas de las distintas capas y componentes del SDK.<\/p>\n<p>En 2.1.1, ahora admitimos tres nuevos puntos de ampliaci\u00f3n:<\/p>\n<ol>\n<li><b>Serializadores<\/b> - manejar la serializaci\u00f3n y deserializaci\u00f3n de POCOs a JSON.<\/li>\n<li><b>Convertidores<\/b> - gestionar la conversi\u00f3n de los paquetes de bytes de Memcached que van y vienen del servidor Couchbase (y la paridad entre los otros SDK)<\/li>\n<li><b>Transcodificadores<\/b> - se encargan de la conversi\u00f3n y serializaci\u00f3n\/deserializaci\u00f3n del cuerpo de la solicitud o respuesta (la parte \"valor\" de \"clave\/valor\").<\/li>\n<\/ol>\n<p>Para crear un serializador personalizado se implementa la interfaz ITypeSerializer y se proporciona una funci\u00f3n Func<itypeserializer> como m\u00e9todo de f\u00e1brica para crear el serializador a la ClientConfiguration. Un ejemplo de serializador personalizado ser\u00eda si quisieras utilizar otra API de serializaci\u00f3n JSON (quiz\u00e1s <a href=\"https:\/\/github.com\/ServiceStack\/ServiceStack.Text\">\u00bfServicioStack.Text?<\/a>) distinta de la API JSON.NET est\u00e1ndar que el SDK utiliza por defecto. <\/itypeserializer><\/p>\n<p>Los convertidores y transcodificadores personalizados tambi\u00e9n se pueden conectar implementando las interfaces ITypeConverter o ITypeTranscoder y proporcionando una clase personalizada que gestione su caso de uso o necesidad espec\u00edfica. Al igual que en el caso de los serializadores, se proporciona una clase Func<itypetranscoder> o Func<itypeconverter> para \"inyectar\" el nuevo comportamiento en el cliente. <\/itypeconverter><\/itypetranscoder><\/p>\n<p>En futuras entradas profundizaremos en estas extensiones e ilustraremos c\u00f3mo construir e inyectar nuevos comportamientos de transcodificaci\u00f3n, serializaci\u00f3n y\/o conversi\u00f3n en el cliente.<\/p>\n<h2>Otras novedades de la versi\u00f3n 2.1.0<\/h2>\n<h3>Ajustes por conexi\u00f3n para TCP KEEP-ALIVES<\/h3>\n<p>La configuraci\u00f3n por defecto del sistema operativo para TCP KEEP-ALIVES en Windows es de 120 minutos. En algunos casos, tales como despliegues en la nube donde los dispositivos de red (balanceadores de carga, etc) se han configurado para matar las conexiones TCP que han estado inactivas durante un per\u00edodo de tiempo m\u00e1s corto, necesitamos una manera de establecer el TCP KEEP-ALIVES por defecto a un per\u00edodo de tiempo menor. Usted puede hacer esto globalmente a nivel del sistema operativo a trav\u00e9s de la configuraci\u00f3n del Registro a trav\u00e9s de KeepAliveInterval y KeepAliveTime, sin embargo, esto afectar\u00e1 a todas las aplicaciones que se ejecutan en ese servidor. Una mejor soluci\u00f3n es cambiar el intervalo y el tiempo a nivel de conexi\u00f3n TCP para que s\u00f3lo se aplique a las conexiones que el cliente est\u00e1 utilizando.<\/p>\n<p>Ahora es posible hacerlo a trav\u00e9s de las propiedades EnableTcpKeepAlives, TcpKeepAliveTime y TcpKeepAliveInterval de la clase ClientConfiguration. EnableTcpKeepAlives habilitar\u00e1 o deshabilitar\u00e1 TCP KEEP-ALIVES (por defecto est\u00e1 habilitado), TcpKeepAliveTime es el tiempo que transcurrir\u00e1 antes de que se env\u00eden KEEP-ALIVES y TcpKeepAliveInterval es el intervalo entre KEEP-ALIVES una vez alcanzado el TcpKeepAliveTime.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/c723eba945af48265081.js\"><\/script><\/p>\n<p>En el ejemplo anterior, antes de crear el objeto Cluster y abrir un bucket desde \u00e9l, creamos una ClientConfiguration y establecemos EnableTcpKeepAlives a true (ten en cuenta que el valor por defecto es true, as\u00ed que esto es s\u00f3lo para ilustrar), el TcpKeepAliveTime se establece en 1hr (esto es cuando el primer paquete KEEP-ALIVE se enviar\u00e1 si la conexi\u00f3n est\u00e1 inactiva), y finalmente establecemos el TcpKeepAliveInterVal a 5secs. Lo que esto significa es que despu\u00e9s de 1hr de inactividad, el cliente comenzar\u00e1 a enviar KEEP-ALIVES TCP cada 5segundos hasta que la conexi\u00f3n se active de nuevo.<\/p>\n<h3>Compatibilidad con el m\u00e9todo Exists<\/h3>\n<p>Los usuarios piden a menudo una forma de comprobar que una clave existe sin tener que recuperar el valor. Ahora tenemos este soporte en la v2.1.0. Se admiten las versiones s\u00edncrona y as\u00edncrona de este m\u00e9todo.<\/p>\n<h3>Soporte para GAT (Get and Touch) y Touch (para vencimientos deslizantes)<\/h3>\n<p>Se han introducido dos nuevos m\u00e9todos: GetAndTouch y Touch. GetAndTouch recuperar\u00e1 un valor y actualizar\u00e1 su caducidad y Touch actualizar\u00e1 la caducidad de una clave, pero no devolver\u00e1 ning\u00fan valor.<\/p>\n<h2>Correcci\u00f3n de errores importantes<\/h2>\n<ul>\n<li>Transcodificaci\u00f3n de n\u00fameros enteros de 1.3.X a 2.X<\/li>\n<li>Correcciones para la lectura de r\u00e9plicas<\/li>\n<li>Much\u00edsimas correcciones de errores y mejoras.<\/li>\n<\/ul>\n<h2>C\u00f3mo obtener el SDK .NET de Couchbase<\/h2>\n<p>El SDK puede descargarse directamente, a trav\u00e9s de NuGet, o clonando y extrayendo el repositorio de Github:<\/p>\n<ul>\n<li>Descargar los binarios <a href=\"https:\/\/packages.couchbase.com.s3.amazonaws.com\/clients\/net\/2.1\/Couchbase-Net-Client-2.1.0.zip\">aqu\u00ed<\/a>.<\/li>\n<li>El paquete NuGet se encuentra en <a href=\"https:\/\/www.nuget.org\/packages\/CouchbaseNetClient\/\">aqu\u00ed<\/a>.<\/li>\n<li>El repositorio de Github es <a href=\"https:\/\/github.com\/couchbase\/couchbase-net-client\">aqu\u00ed<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>At long last the Couchbase .NET SDK 2.1.0 GA is available! This release is a minor release for 2.1.0, but it includes support for the Task Asynchrony Pattern (async and await keywords) and non-blocking IO for all Key\/Value operations. In [&hellip;]<\/p>","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,2201],"tags":[1437,1439],"ppma_author":[8970],"class_list":["post-1933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-tools-sdks","tag-async","tag-asynchronous"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client! - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!\" \/>\n<meta property=\"og:description\" content=\"At long last the Couchbase .NET SDK 2.1.0 GA is available! This release is a minor release for 2.1.0, but it includes support for the Task Asynchrony Pattern (async and await keywords) and non-blocking IO for all Key\/Value operations. In [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-11T19:23:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:49:46+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!\",\"datePublished\":\"2015-05-11T19:23:46+00:00\",\"dateModified\":\"2025-06-14T06:49:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\"},\"wordCount\":1093,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"async\",\"asynchronous\"],\"articleSection\":[\".NET\",\"Tools &amp; SDKs\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\",\"name\":\"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-05-11T19:23:46+00:00\",\"dateModified\":\"2025-06-14T06:49:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\/\/x.com\/jeffrysmorris\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/jeff-morris\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client! - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/","og_locale":"es_MX","og_type":"article","og_title":"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!","og_description":"At long last the Couchbase .NET SDK 2.1.0 GA is available! This release is a minor release for 2.1.0, but it includes support for the Task Asynchrony Pattern (async and await keywords) and non-blocking IO for all Key\/Value operations. In [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-05-11T19:23:46+00:00","article_modified_time":"2025-06-14T06:49:46+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!","datePublished":"2015-05-11T19:23:46+00:00","dateModified":"2025-06-14T06:49:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/"},"wordCount":1093,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["async","asynchronous"],"articleSection":[".NET","Tools &amp; SDKs"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/","url":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/","name":"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-05-11T19:23:46+00:00","dateModified":"2025-06-14T06:49:46+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-net-sdk-2-1-0-the-asynchronous-couchbase-net-client\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Couchbase .NET SDK 2.1.0: The asynchronous Couchbase .NET Client!"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, Ingeniero Superior de Software, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jeff-morris\/"}]}},"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","author_category":"","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","first_name":"Jeff","job_title":"","user_url":"","description":"Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta)."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1933"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1933\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1933"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}