diff --git a/dask/base.py b/dask/base.py
--- a/dask/base.py
+++ b/dask/base.py
@@ -949,6 +949,7 @@ def tokenize(*args, **kwargs):
         complex,
         type(Ellipsis),
         datetime.date,
+        datetime.timedelta,
     ),
     identity,
 )

diff --git a/dask/tests/test_base.py b/dask/tests/test_base.py
--- a/dask/tests/test_base.py
+++ b/dask/tests/test_base.py
@@ -426,6 +426,11 @@ def test_tokenize_ordered_dict():
     assert tokenize(a) != tokenize(c)
 
 
+def test_tokenize_timedelta():
+    assert tokenize(datetime.timedelta(days=1)) == tokenize(datetime.timedelta(days=1))
+    assert tokenize(datetime.timedelta(days=1)) != tokenize(datetime.timedelta(days=2))
+
+
 @pytest.mark.parametrize("enum_type", [Enum, IntEnum, IntFlag, Flag])
 def test_tokenize_enum(enum_type):
     class Color(enum_type):

datetime.timedelta deterministic hashing
What happened:

It seams that python datetime.timedelta arguments in a pure delayed are generating inconsistant dask keys.

Minimal Complete Verifiable Example:

```python
import dask
import datetime

@dask.delayed(pure=True):
def test(obj):
    return obj

dt = datetime.timedelta(days=1)
assert test(dt).key == test(dt).key
```

Environment:

Dask version: 2022.6.0
Python version: 3.9
Operating System: Linux (Red Hat 7)
Install method (conda, pip, source): pip

Fix proposal:

Add date.timedelta in the list of types where identity is applied (https://github.com/dask/dask/pull/7836/files)

I can provide a PR


dask/tests/test_base.py::test_tokenize_timedelta
dask/tests/test_base.py::test_normalize_function_dataclass_field_no_repr dask/tests/test_base.py::test_tokenize_object dask/tests/test_base.py::test_tokenize_datetime_date dask/tests/test_base.py::test_tokenize_numpy_array_on_object_dtype dask/tests/test_base.py::test_custom_collection dask/tests/test_base.py::test_tokenize_numpy_scalar dask/tests/test_base.py::test_tokenize_numpy_memmap dask/tests/test_base.py::test_tokenize_dense_sparse_array[dia] dask/tests/test_base.py::test_tokenize_base_types[1j0] dask/tests/test_base.py::test_persist_delayed dask/tests/test_base.py::test_tokenize_range dask/tests/test_base.py::test_compute_with_literal dask/tests/test_base.py::test_tokenize_enum[IntEnum] dask/tests/test_base.py::test_tokenize_numpy_scalar_string_rep dask/tests/test_base.py::test_persist_delayed_custom_key[a] dask/tests/test_base.py::test_optimize_globals dask/tests/test_base.py::test_get_collection_names dask/tests/test_base.py::test_tokenize_dense_sparse_array[coo] dask/tests/test_base.py::test_optimizations_keyword dask/tests/test_base.py::test_persist_array_bag dask/tests/test_base.py::test_compute_array_bag dask/tests/test_base.py::test_visualize_highlevelgraph dask/tests/test_base.py::test_tokenize_base_types[1j1] dask/tests/test_base.py::test_compute_as_if_collection_low_level_task_graph dask/tests/test_base.py::test_get_name_from_key dask/tests/test_base.py::test_persist_array dask/tests/test_base.py::test_persist_item_change_name dask/tests/test_base.py::test_tokenize_numpy_array_supports_uneven_sizes dask/tests/test_base.py::test_persist_delayed_rename[a-rename2-b] dask/tests/test_base.py::test_tokenize_enum[Flag] dask/tests/test_base.py::test_tokenize_numpy_memmap_no_filename dask/tests/test_base.py::test_tokenize_base_types[a0] dask/tests/test_base.py::test_tokenize_dense_sparse_array[csr] dask/tests/test_base.py::test_tokenize_numpy_array_consistent_on_values dask/tests/test_base.py::test_tokenize_function_cloudpickle dask/tests/test_base.py::test_persist_delayed_custom_key[key1] dask/tests/test_base.py::test_persist_delayedattr dask/tests/test_base.py::test_scheduler_keyword dask/tests/test_base.py::test_persist_array_rename dask/tests/test_base.py::test_tokenize_base_types[x8] dask/tests/test_base.py::test_get_scheduler dask/tests/test_base.py::test_get_scheduler_with_distributed_active dask/tests/test_base.py::test_callable_scheduler dask/tests/test_base.py::test_tokenize_dict dask/tests/test_base.py::test_persist_bag dask/tests/test_base.py::test_tokenize_numpy_memmap_offset dask/tests/test_base.py::test_tokenize_numpy_ufunc_consistent dask/tests/test_base.py::test_tokenize_base_types[str] dask/tests/test_base.py::test_tokenize_enum[IntFlag] dask/tests/test_base.py::test_tokenize_pandas_index dask/tests/test_base.py::test_tokenize_enum[Enum] dask/tests/test_base.py::test_default_imports dask/tests/test_base.py::test_tokenize_dense_sparse_array[csc] dask/tests/test_base.py::test_tokenize_set dask/tests/test_base.py::test_persist_item dask/tests/test_base.py::test_is_dask_collection dask/tests/test_base.py::test_tokenize_base_types[1.0] dask/tests/test_base.py::test_raise_get_keyword dask/tests/test_base.py::test_normalize_function dask/tests/test_base.py::test_optimizations_ctd dask/tests/test_base.py::test_tokenize_dataclass dask/tests/test_base.py::test_tokenize_dense_sparse_array[bsr] dask/tests/test_base.py::test_tokenize_numpy_matrix dask/tests/test_base.py::test_tokenize_base_types[True] dask/tests/test_base.py::test_optimize dask/tests/test_base.py::test_normalize_function_limited_size dask/tests/test_base.py::test_unpack_collections dask/tests/test_base.py::test_tokenize_base_types[x9] dask/tests/test_base.py::test_tokenize_sequences dask/tests/test_base.py::test_tokenize_dense_sparse_array[lil] dask/tests/test_base.py::test_compute_nested dask/tests/test_base.py::test_tokenize_base_types[1] dask/tests/test_base.py::test_persist_nested dask/tests/test_base.py::test_persist_literals dask/tests/test_base.py::test_tokenize_base_types[x7] dask/tests/test_base.py::test_normalize_base dask/tests/test_base.py::test_visualize dask/tests/test_base.py::test_optimize_None dask/tests/test_base.py::test_persist_bag_rename dask/tests/test_base.py::test_tokenize_partial_func_args_kwargs_consistent dask/tests/test_base.py::test_tokenize_ordered_dict dask/tests/test_base.py::test_tokenize_object_array_with_nans dask/tests/test_base.py::test_persist_delayedleaf dask/tests/test_base.py::test_compute_no_opt dask/tests/test_base.py::test_persist_delayed_rename[key3-rename3-new_key3] dask/tests/test_base.py::test_tokenize_object_with_recursion_error dask/tests/test_base.py::test_tokenize_numpy_datetime dask/tests/test_base.py::test_persist_delayed_rename[a-rename1-a] dask/tests/test_base.py::test_tokenize_kwargs dask/tests/test_base.py::test_tokenize_discontiguous_numpy_array dask/tests/test_base.py::test_clone_key dask/tests/test_base.py::test_compute_array dask/tests/test_base.py::test_tokenize_base_types[int] dask/tests/test_base.py::test_tokenize_callable dask/tests/test_base.py::test_use_cloudpickle_to_tokenize_functions_in__main__ dask/tests/test_base.py::test_tokenize_same_repr dask/tests/test_base.py::test_persist_delayed_rename[a-rename0-a] dask/tests/test_base.py::test_tokenize_base_types[a1] dask/tests/test_base.py::test_tokenize_base_types[None] dask/tests/test_base.py::test_tokenize_literal dask/tests/test_base.py::test_tokenize_dense_sparse_array[dok] dask/tests/test_base.py::test_replace_name_in_keys dask/tests/test_base.py::test_tokenize_method dask/tests/test_base.py::test_tokenize dask/tests/test_base.py::test_optimize_nested