diff --git a/README.md b/README.md
index 4ee8e04..b62e92c 100644
--- a/README.md
+++ b/README.md
@@ -86,6 +86,7 @@ void app_main(void)
     strcpy(send_message.char_value, "THIS IS A CHAR");
     send_message.float_value = 1.234;
     send_message.bool_value = false;
+    printf("Used ESP-NOW version %d.\n", zh_espnow_get_version());
     for (;;)
     {
         send_message.int_value = esp_random();
diff --git a/include/zh_espnow.h b/include/zh_espnow.h
index 07a9399..6aab7ab 100644
--- a/include/zh_espnow.h
+++ b/include/zh_espnow.h
@@ -104,6 +104,14 @@ extern "C"
      */
     esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8_t data_len);
 
+    /**
+     * @brief Get ESP-NOW version.
+     * 
+     * @return
+     *              - ESP-NOW version
+     */
+    uint8_t zh_espnow_get_version(void);
+
 #ifdef __cplusplus
 }
 #endif
\ No newline at end of file
diff --git a/version.txt b/version.txt
index 1cc5f65..867e524 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-1.1.0
\ No newline at end of file
+1.2.0
\ No newline at end of file
diff --git a/zh_espnow.c b/zh_espnow.c
index 5e612c2..d30faac 100755
--- a/zh_espnow.c
+++ b/zh_espnow.c
@@ -81,7 +81,7 @@ esp_err_t zh_espnow_init(const zh_espnow_init_config_t *config)
         ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__);
         return ESP_FAIL;
     }
-    if (xTaskCreatePinnedToCore(&_processing, "NULL", _init_config.stack_size, NULL, _init_config.task_priority, &_processing_task_handle, tskNO_AFFINITY) != pdPASS)
+    if (xTaskCreatePinnedToCore(&_processing, "zh_espnow_processing", _init_config.stack_size, NULL, _init_config.task_priority, &_processing_task_handle, tskNO_AFFINITY) != pdPASS)
     {
         ESP_LOGE(TAG, "ESP-NOW initialization fail. Internal error at line %d.", __LINE__);
         return ESP_FAIL;
@@ -154,6 +154,11 @@ esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8
     }
     memcpy(queue.data.payload, data, data_len);
     queue.data.payload_len = data_len;
+    if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE)
+    {
+        ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
+        return ESP_FAIL;
+    }
     if (target == NULL)
     {
         ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC FF:FF:FF:FF:FF:FF to queue success.");
@@ -162,11 +167,6 @@ esp_err_t zh_espnow_send(const uint8_t *target, const uint8_t *data, const uint8
     {
         ESP_LOGI(TAG, "Adding outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(target));
     }
-    if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE)
-    {
-        ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
-        return ESP_FAIL;
-    }
     return ESP_OK;
 }
 
@@ -213,15 +213,16 @@ static void IRAM_ATTR _recv_cb(const esp_now_recv_info_t *esp_now_info, const ui
     }
     memcpy(queue.data.payload, data, data_len);
     queue.data.payload_len = data_len;
+    if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE)
+    {
+        ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
+        return;
+    }
 #if defined CONFIG_IDF_TARGET_ESP8266 || ESP_IDF_VERSION_MAJOR == 4
     ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(mac_addr));
 #else
     ESP_LOGI(TAG, "Adding incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X to queue success.", MAC2STR(esp_now_info->src_addr));
 #endif
-    if (xQueueSend(_queue_handle, &queue, portTICK_PERIOD_MS) != pdTRUE)
-    {
-        ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
-    }
 }
 
 static void IRAM_ATTR _processing(void *pvParameter)
@@ -309,11 +310,14 @@ static void IRAM_ATTR _processing(void *pvParameter)
                 on_send->status = ZH_ESPNOW_SEND_FAIL;
                 _attempts = 0;
             }
-            ESP_LOGI(TAG, "Outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr));
             if (esp_event_post(ZH_ESPNOW, ZH_ESPNOW_ON_SEND_EVENT, on_send, sizeof(zh_espnow_event_on_send_t), portTICK_PERIOD_MS) != ESP_OK)
             {
                 ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
             }
+            else
+            {
+                ESP_LOGI(TAG, "Outgoing ESP-NOW data to MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr));
+            }
             heap_caps_free(queue.data.payload);
             esp_now_del_peer(peer->peer_addr);
             heap_caps_free(peer);
@@ -322,15 +326,25 @@ static void IRAM_ATTR _processing(void *pvParameter)
         case ON_RECV:
             ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processing begin.", MAC2STR(queue.data.mac_addr));
             zh_espnow_event_on_recv_t *recv_data = (zh_espnow_event_on_recv_t *)&queue.data;
-            ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr));
             if (esp_event_post(ZH_ESPNOW, ZH_ESPNOW_ON_RECV_EVENT, recv_data, recv_data->data_len + sizeof(recv_data->mac_addr) + sizeof(uint8_t), portTICK_PERIOD_MS) != ESP_OK)
             {
                 ESP_LOGE(TAG, "ESP-NOW message processing task internal error at line %d.", __LINE__);
             }
+            else
+            {
+                ESP_LOGI(TAG, "Incoming ESP-NOW data from MAC %02X:%02X:%02X:%02X:%02X:%02X processed success.", MAC2STR(queue.data.mac_addr));
+            }
             break;
         default:
             break;
         }
     }
     vTaskDelete(NULL);
+}
+
+uint8_t zh_espnow_get_version(void)
+{
+    uint32_t version = 0;
+    esp_now_get_version(&version);
+    return version;
 }
\ No newline at end of file